本关任务:输入一个字符串以及Z字形的行数,将它按照z字形重排后输出 result ,给出c语言代码
时间: 2024-06-06 17:10:57 浏览: 23
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char result[MAXLEN];
int main()
{
char str[MAXLEN];
int numRows;
scanf("%s%d", str, &numRows);
int len = strlen(str);
int groupSize = numRows * 2 - 2; // 每组字符个数
int groupNum = (len + groupSize - 1) / groupSize; // 组数
int index = 0; // result数组的下标
for (int i = 0; i < numRows; i++)
{
for (int j = 0; j < groupNum; j++)
{
int pos1 = j * groupSize + i; // 当前组第i行的字符下标
if (pos1 < len) // 如果下标在字符串范围内
{
result[index++] = str[pos1];
}
int pos2 = (j + 1) * groupSize - i - 2; // 当前组第i行斜着走的字符下标
if (i != 0 && i != numRows - 1 && pos2 < len) // 如果下标在字符串范围内且不是第一行或最后一行
{
result[index++] = str[pos2];
}
}
}
printf("%s\n", result);
return 0;
}