题意:首先输入一个n,然后依次输入n个字符,找出最大的字符长度M,然后进行排版一行最多有60个字符,每一个纵列对齐,为了达到对齐的效果使得前n-1列的每个字符的长度为M+2,不够补齐空格。就可以根据公式求出列和行输出。
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
using namespace std;
string str[105];
int main()
{
int n;
while(cin>>n)
{
int Max=0;
for(int i=0;i<n;i++)
{
cin>>str[i];
if(str[i].length()>Max)
{
Max=str[i].length();
}
}
int c,r;
c=(60-Max)/(Max+2)+1;
r=(n-1)/c+1;
for(int i=0;i<60;i++)
printf("-");
printf("\n");
sort(str,str+n);
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
int t;
t=(j-1)*r+i;
if(t<=n)
cout<<str[t-1];
if(j!=c)
{
for(int i1=0;i1<Max+2-str[t-1].length();i1++)
cout<<" ";
}
}
cout<<endl;
}
}
return 0;
}