简单题, 文字排版, 每行
找到最长的单词, 用60+2再除以最长单词的长度+2取floor(默认的)即可得到column,
再用总单词数除以column取ceil得到row
输出单词, 每个单词输出完补齐空格即可
一开始的输出和题目的样例输出差了几个空格, 以后OJ会检测到,
没想到提交上去直接AC了, 看来OJ不是对每道题的输出格式都严格要求的
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <deque>
#include <map>
using namespace std;
const int MAXN = 60;
typedef long long LL;
/*
uva 400
*/
map<string,int> mp;
vector<string> vec;
int longest = 0;
void CalcRows(int & row, int & column){
sort(vec.begin(),vec.end());
column = 62/longest;
row = ceil(1.0*vec.size()/column);
//另一种 模拟计算需要多少行 的方法
// row = column = 0;
// bool Found = false;
// do{
// row++;
//
// column = vec.size()/row;
// if( vec.size()%row>0 ) column+=1;
// }while( column*longest-2 > 60 );
}
int main(){
// freopen("input2.txt","r",stdin);
// freopen("output.txt","w",stdout);
int N;
string str;
while( scanf("%d",&N)!=EOF ){
vec.clear();
longest = 0;
for(int i=0; i<N; i++){
cin >> str;
vec.push_back(str);
if( str.length()>longest ){
longest = str.length();
}
}
cout << "------------------------------------------------------------" << endl;
int row, column;
longest += 2;
CalcRows(row,column);
// cout << row << " " << column << endl;
for(int r=0; r<row; r++){
int k;
for(k=0; k<column && r+k*row<vec.size(); k++){
cout << vec[r+k*row];
// cout << " " << longest - vec[r+k*row].length();
for(int i=vec[r+k*row].length(); i<longest; i++){
printf(" ");
}
}
cout << endl;
}
}
return 0;
}