UVa--400 Unix ls(格式输出)

来源:互联网 发布:项目管理系统源码 编辑:程序博客网 时间:2024/05/22 07:52

UVa 400

题解

模拟 Unix 的 ls 命令。
输入n以及n个文件名,排序后按照列优先的次序左对齐输出。
注意:

The rightmost column will be the width of the longest filename and all other columns will be the width of the longest filename plus 2.

据此,可以计算输出有多少行和列。
设最长文件名的长度为 maxLen,则
列数:cols=(maxcolmaxLen)/(maxLen+2)+1
行数:rows=n/cols(n1)/cols+1

#include <bits/stdc++.h>using namespace std;const int maxcol = 60;const int maxn = 100 + 5;string filenames[maxn];void print(const string &str, int len, char ch){    cout << str;    for(int i = 0; i < len - str.length(); ++i)        cout << ch;}int main(){    #ifdef LOCAL    freopen("data.in", "r", stdin);    #endif // LOCAL    for(int n; cin >> n; )    {        int maxLen = 0;        for(int i = 0; i < n; ++i){            cin >> filenames[i];            maxLen = max(maxLen, (int)filenames[i].length());        }        int cols = (maxcol - maxLen) / (maxLen + 2) + 1, rows = (n - 1) / cols + 1; //向上取整        print("", maxcol, '-');        cout << endl;        sort(filenames, filenames + n);        for(int i = 0; i < rows; ++i)        {            for(int j = 0; j < cols; ++j)            {                int idx = j * rows + i;                if(idx < n) print(filenames[idx], j == cols - 1 ? maxLen : maxLen + 1, ' ');            }            cout << endl;        }    }    return 0;}
0 0
原创粉丝点击