【例题5-8 UVA - 400】Unix ls

时间:2023-11-10 16:24:38

【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

设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;
}