五个测试点:
测试点0:即给出的测试样例
测试点1:长度恰好整除行数。
测试点2:不满一列。
测试点3:最小规模数据。
测试点4:最大规模随机数据。
代码如下:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
int n;cin>>n;
string s;
getchar();//多余的回车处理
getline(cin,s);
int a=s.size();
//总共n行,每列第一个字符的序号为0,n,2n...然后从右至左输出即可。
for(int i=0;i<n;i++){//选择第i行的输出
for (int k=a/n;k>=0;k--){//k表示a总共可以输出多少列。
if(n*k==a){k=k-1;} //即a被n整除,恰好可以输出k列,如果k不减1则会多输出一列空格
//(这列是输出最后多余的几位,当没有多余的字符时则依据下面的逻辑输出空格了)
if(k*n+i>=a&&k==a/n) { //k*n+i代表第i行第k列的字符,当这个字符超出输入字符串s的大小,则以空格填充。
cout<<" ";continue;
}
cout<<s[k*n+i];
if(k==0) cout<<endl;//从左至右输出,0即一行的最后一位,换行。
}
}
}