法一:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int N;
while(cin >> N)
{
vector<string> list;
int max_len = 0;
for(int i = 0; i < N; i++)
{
string str;
cin >> str;
max_len = max_len < str.length()?str.length():max_len;
list.push_back(str);
}
sort(list.begin(), list.end());
int count_col = 0;
int count_line = 0;
count_col = (60+2)/(max_len+2);
count_line = ceil((double)list.size()/count_col);
for(int i = 0; i < 60; i++)
cout <<"-";
cout << endl;
for(int i = 0; i < count_line; i++)
{
for(int k = 0; k < count_col&&(i+k*count_line) < list.size(); k++)
{
if(k > 0)
cout << " ";
string out = list[i+k*count_line];
cout << out;
for(int j = 0; j < max_len-out.size(); j++)
cout << " ";
}
cout << endl;
}
}
return 0;
}
法二:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int maxcol = 60;
const int maxn = 100 + 5;
string filenames[maxn];
void print(const string &s, int len, char extra)
{
cout << s;
for(int i = 0; i < len-s.length(); i++)
{
cout << extra;
}
}
int main()
{
int n;
while(cin >> n)
{
int M = 0;
for(int i = 0; i < n; i++)
{
cin >> filenames[i];
M = max(M, (int)filenames[i].length());
}
int cols = (maxcol-M)/(M+2) + 1, rows = (n-1)/cols + 1;
print("", 60, '-');
cout << "\n";
sort(filenames, filenames+n);
for(int r = 0; r < rows; r++)
{
for(int c = 0; c < cols; c++)
{
int idx = c*rows + r;
if(idx < n)
print(filenames[idx], c == cols-1?M:M+2, ' ');
}
cout << "\n";
}
}
return 0;
}