PTA-古风排版

古风排版 (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;
} 

猜你喜欢

转载自blog.csdn.net/Skyed_blue/article/details/88584327