L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn)
题解
这道题主要是要理清思路,题目说要将一段文字按照古代人的排版来排,从右向左竖向排版,具体排版如下:
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
题目说输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。那就要根据给的每列字符数N来确定行数,这样我们就知道用多少大小的二维数组来装这段字符串了,还有一点就是要注意空格,二维数组中如果没有字符来填充的话就需要用空格来代替。
我在代码中用了gets来输入,gets输入与scanf输入有有一些区别,gets是以回车为结束的,并且会将'\0'作为结束符加到字符串最后,而scanf则是以空格为结束。
代码
cpp
#include<stdio.h>
#include<string.h>
int main()
{
int n = 0;
scanf("%d ",&n);
char ch[1001]={0};
gets(ch);
int len = strlen(ch);
int col=len/n;
if(len%n!=0)
{
col+=1;
}
int j = 0;
int index = 0;
char arr[100][100]={0};
for(j=col-1;j>=0;j--)
{
int i = 0;
for(i=0;i<n;i++)
{
if(ch[index]!='\0')
{
arr[i][j]=ch[index];
index++;
}
else
{
arr[i][j]=' ';
}
}
}
int i = 0;
for(i=0;i<n;i++)
{
for(j=0;j<col;j++)
{
printf("%c",arr[i][j]);
}
printf("\n");
}
return 0;
}