【紫书】 Unix ls UVA - 400 模拟

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

题意:中文版https://vjudge.net/problem/UVA-400#author=Zsc1615925460

题解:首先读取字符,维护一个最长字符串长度M,再排序。

   对于输出,写一个print(string s,int len,char c)  函数,用来输出s,不足len的用c补齐。

   关于竖着输出,用一个idx算出这个位置应该放第几个元素。

坑:需要在输出前加一句 if(idx<n),否则会多输出很多空格???

#include <cstdio>
#include <cstring>
#include <queue>
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
const int maxcol = ;
const int maxn = + ;
string nms[maxn];
void print(string s, int len, char ex) {
cout << s;
for (int i = ; i < len - s.length(); i++){
cout << ex;
}
}
int main()
{
int n;
while (cin >> n) {
int M = ;
for (int i = ; i < n; i++) {
cin >> nms[i];
M = max(M, (int)nms[i].length());
}
int col = (maxcol - M) / (M + ) + , row = (n-) / col+;//只有一行
print("", , '-'); cout << endl;
sort(nms, nms + n); for (int r = ; r < row; r++) {
for (int c = ; c < col; c++) {
int idx = c*row+ r;
if(idx<n)print(nms[idx],c==col-? M:M+, ' ');
}
cout << endl;
}
}
return ;
}