题解:一般大家遇到这种题,都会想到重开一个数组来进行存取,但是在这道题里面来看,是有点多余了。因为我们只需要画出来图分析一下就可以了。
如图所示,第一行是我们最开始读入的字符串的长度(注意此处的len包含'\0'),下面蓝色的则是我们需要输出的编码和原字符串编码的对应情况,此时我们会发现,蓝色的第一行,都是我们读入的n的整数倍,而依次下面的每一行都是分别在第一行的编码的基础上+1,故此处可以写一个内部For循环(循环控制在0到n - 1),因此代码实现如下:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int i,j,n,lie;
scanf("%d",&n);
char str[1005];
getchar();
gets(str);
int len = strlen(str);
if(len % n == 0)
lie = len / n;
else
lie = len / n + 1;
for(i = 0;i < n; i++)
{
for(j = lie - 1;j >= 0; j--)
{
if(j * n + i >= len)
printf(" ");
else
printf("%c",str[j * n + i]);
}
printf("\n");
}
return 0;
}