题目描述:
蒜头君是一千年前的古人,今天他穿越来现代,讶异地发现所有文字都从左到右从上到下了。这让蒜头君感到很不习惯,于是他决定用写一个程序,把文字转为从右到左,从上到下。
但众所周知,随着时代的发展,人民教育水平也在不断的提高,一千年前的古人编程水平自然是不如我们现代人的。这不,蒜头君苦练编程,写了一段程序,可是漏洞百出,所以蒜头君决定求助于你,你能帮帮他吗?
输入格式
一个正整数n,表示转换后每列有n个字(n小于等于1000)),接下来一行字符串,表示原文章。
输出格式
从右到左,从上到下的字符,注意字符矩阵中,没有字符的位置输出空格即可。
注意:
输出的内容是一个矩阵,且其数据存储的方式是根据“从右到左,从上到下”的顺序。
提示:
由此我们可以规定,列值从右向左数,行值从上向下数,那么:每一列有 n个字符,因此第j列第i行存储的恰好是字符串中第 j * n + i个字符。
样例输入
3
abcsdccccd
样例输出
dcsa
cdb
ccc
【C++代码】
#include<bits/stdc++.h>
using namespace std;
char a[1000][1000];//定义数组
int main() {
int n;
string s;
cin>>n>>s;//输入
int c=s.length()/n,len=s.size();//计算出有几列
if(s.length()%n!=0){//考虑除不尽的情况
c+=1;
}
for(int i=0;i<c*n-len;i++){//如果除不尽,就要在字符串末尾补空格
s+=" ";
}
for(int i=0;i<n;i++){
for(int j=0;j<c;j++){
if(j*n+1<=s.size())a[i][j]=s[j*n+i];
/*注意:
此时存入的是反方向的,不要搞错了*/
}
}
for(int i=0;i<n;i++){
for(int j=c-1;j>=0;j--){//反向输出(左右)
cout<<a[i][j];
}cout<<endl;//记得换行
}
return 0;
}