Unix ls
题意
输入正整数n以及n个文件名,排序后按列优先的方式左对齐输出。假设最长文件名有M字符,则最右列有M字符,其他列都是M+2字符。
题解
只要算出行数和列数即可
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cstring>
#include <cstdio>
#include <cmath>
#define met(a, b) memset(a, b, sizeof(a));
#define IN freopen("in.txt", "r", stdin);
using namespace std;
typedef long long LL;
const int maxn = 1e2 + 5;
const int INF = (1 << 31) - 1;
int n;
string s[maxn];
int main() {
#ifdef _LOCAL
IN;
#endif // _LOCAL
while(cin >> n) {
for(int i = 0; i < 60; ++i) printf("-"); printf("\n");
int M = 0;
for(int i = 0; i < n; ++i) {
cin >> s[i];
int len = s[i].length();
M = max(M, len);
}
int col = 62/(M+2), row = (n-1) / col + 1;
sort(s, s+n);
for(int i = 0; i < row; ++i) {
for(int j = 0; j < col && i+j*row < n; ++j) {
cout << s[i+j*row];
int t = s[i+j*row].length();
if(j != col-1) for(int k = 0; k < M+2-t;++k) cout <<" ";
}
cout << endl;
}
}
return 0;
}