中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
思路:
1.每一列有n个字符数,也就是有n行,字符串的长度除以行数就是列数,如果有余数,就列数+1。
2.开一个二维数组来存,首先初始化为空格(!!!,因为最后一列(从右向左看)可能填不满)。
3.然后嘞,字符串的第一个字母放在第一行的最后一列,最后一列排满之后,开始排倒数第二列,来个嵌套循环实现,外面j=col-->1,里面i=1-->n,从字符串下标为0开始,下标数值小于字符串长度就把他放在数组里。
4.完了之后在把这个二维数组从左向右输出。
AC:
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
char v[N][N];
int main()
{
int n;
cin>>n;
getchar();
string s;
getline(cin,s);
int col;
int x=s.length()/n;
int y=s.length()%n;
if(y!=0) col=x+1;
else col=x;
int index=0;
memset(v,' ',sizeof(v));
for(int j=col;j>=1;j--)
{
for(int i=1;i<=n;i++)
{
if(index<s.length())
v[i][j]=s[index++];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=col;j++)
cout<<v[i][j];
cout<<endl;
}
}