题目:
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
主要难点在于输出的格式,但其实找到规律也不会难。
讲一下代码中的n*j+i。先看n*j,n是每列的字符数也是行数,j是列数,j由大到小,n*j得到了最左上角的字符,j的逐渐变小,就得到了一行我们想要的输出结果;再看+i,没加i时我们只能得到一行,加了i之后,随着i的变化,我们可以得到不同的行。(注意i是小于n的,而n可以代表着行数)
代码:
#include <stdio.h>
#include <string.h>
int main()
{
int n = 0;
char ch[1006] = {0};
scanf("%d",&n);//n其实可以表示行数
getchar();
gets(ch);
int len = strlen(ch);//字符串长度
int line = len/n;//算出有几列
if(line*n<len)
line++;
for(int i = 0;i<n;i++)
{
//int k = 0;
for(int j = line-1;j>=0;j--)
{
if(ch[n*j+i]=='\0' || (n*j+i)>len)//这里进行一些特殊的处理,将超出的索引与'\0'变成空格
{
printf(" ");
continue;
}
printf("%c",ch[n*j+i]);
}
printf("\n");
}
return 0;
}
结果: