题意:首先输入一个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; }