【例题5-8 UVA - 400】Unix ls
【链接】 我是链接,点我呀:)
【题意】
【题解】
设n个字符串中出现的最长的为len; 最后一列能容纳len个字符,然后前面的列能容纳len+2个字符。 每行最多60个字符。 按照这样的排版,按照字典序,按列输出每个字符串。【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
const int M = 60;
int n,len;
string s[N + 10 ];
void fil(int num, int used ,char key)
{
for (int i = 0; i < num-used; i++)
putchar(key);
}
int main()
{
//freopen("F:\\rush.txt", "r", stdin);
//ios::sync_with_stdio(0), cin.tie(0);
while (cin >> n)
{
len = 0;
for (int i = 0; i < n; i++)
{
cin >> s[i];
len = max(len, (int)s[i].size());
}
int col = (M - len) / (len + 2) + 1;
int row = (n - 1) / col + 1;
sort(s, s + n);
fil(M,0, '-'); puts("");
for (int i = 0, num; i < row; i++)
{
for (int j = 0; j < col; j++)
{
int x = j*row + i;
if (x > n - 1) break;
cout << s[x];
fil(j == col - 1 ? len : len + 2, (int)s[x].size(), ' ');
}
puts("");
}
}
return 0;
}