古风排版 (20 分)
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
a s a T
s t i h
e t s i
c e s
思路分析:
这道题其实不难,但是坑点较多。我的做法是先求出排版所需列数,再将字符串按古风排版存储进一个二维数组c,最后输出该二维数组。
坑点1:对所需列数的求法
坑点2:二维数组c需要赋空格为初值才能完全AC
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n, len, x, y, r, i, ok = 1;
char a[1010];
char c[1010][1010];
memset(c,' ', sizeof(c)); //二维数组全部赋空格初值
cin>>n;
getchar();
fgets(a,1010,stdin); //fgets代替gets才能过pta的编译
len = strlen(a)-1;
if(len%n != 0) r = len/n+1; //r为所需列数
else r = len/n;
for(y = r, i = 0;y >= 1;y--) //古风排版存进c数组
{
if(!ok) break;
for(x = 1;x <= n;x++)
{
c[x][y] = a[i++];
if(i == len)
{
ok = 0;
break;
}
}
}
for(x = 1;x <= n;x++) //输出c数组
{
for(y = 1;y <= r;y++)
cout<<c[x][y];
cout<<endl;
}
return 0;
}