问题描述
p400原题链接:UVaOJ 400 - Unix ls
相关说明:本题为《算法竞赛入门经典(第2版)》例题 5-8
解法一:字符串排序
读入字符串的时候记录最长文件名长度 max_fl ,再结合文件数量 num 去计算出行列数,排序后输出。值得注意的是,排序后的字符串 vector 需要按照列主序输出,因此需要计算偏移量 idx = c * row + r ,与通常见到的行主序不同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <bits/stdc++.h> using namespace std; const int MAX_LINE_LENGTH = 60; int main() { int num; while (cin >> num) { int max_fl = 0; // max_filename_length string name; vector<string> filename; for (int i = 0; i < num; ++i) { cin >> name; filename.push_back(name); max_fl = max((int)name.length(), max_fl); } int cols = (MAX_LINE_LENGTH - max_fl) / (max_fl + 2) + 1; int rows = (num + (cols - 1)) / cols; // Ceil sort(filename.begin(), filename.end()); cout << string(60,'-') << endl; for (int r = 0; r < rows; ++r) { for (int c = 0; c < cols; ++c) { int idx = c * rows + r; if (idx < num) cout << setiosflags(ios::left) << setw(c == cols - 1 ? max_fl : max_fl + 2) << filename[idx]; } cout << endl; } } return 0; } |
1 |
#TODO |