【例题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;
}
posted @ 2017-10-13 16:41  AWCXV  阅读(115)  评论(0编辑  收藏  举报