L1-039 古风排版 (20分)
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数 \(N \; (\lt 100)\),是每一列的字符数。第二行给出一个长度不超过 \(1000\) 的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列 \(N\) 个字符(除了最后一列可能不足 \(N\) 个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
解题思路:
通过在字符串末尾添加一定数量的空格,使得字符串的长度变为 \(N\) 的整数倍。再根据题目中的行列转换规则,逐行输出。容易得出第 \(i\) 行第一个字符为新的字符串中倒数第 \(N+1-i\) 个字符,再往前数 \(N\) 个便是下一个字符,以此类推。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,len;
string s;
int main()
{
cin>>n;
while(getchar()!='\n')continue;
getline(cin,s);
len=s.length();
int t=len%n;
if(t) /*无法整除时添加一定数量的空格*/
for(int i=1;i<=n-t;i++)s+=" ";
len=s.length();
for(int i=1;i<=n;i++) /*逐行输出*/
{
for(int j=len+i-1-n;j>=0;j-=n)cout<<s[j];
cout<<endl;
}
return 0;
}