首页 > 代码库 > UVa 400 (水题) Unix ls
UVa 400 (水题) Unix ls
题意:
有n个文件名,排序后按列优先左对齐输出。设最长的文件名的长度为M,则最后一列长度为M,其他列长度为M+2.
分析:
这道题很简单,但要把代码写的精炼,还是要好好考虑一下的。lrj的代码中有两个亮点,一个是print子函数,一个就是行数的计算。用心体会
1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <algorithm> 5 using namespace std; 6 7 const int maxl = 60; 8 const int maxn = 100 + 5; 9 string names[maxn];10 11 void print(const string& s, int len, char extra)12 {13 printf("%s", s.c_str());14 for(int i = s.length(); i < len; ++i) putchar(extra);15 }16 17 int main()18 {19 //freopen("in.txt", "r", stdin);20 int n;21 while(scanf("%d", &n) == 1)22 {23 int M = 0;24 for(int i = 0; i < n; ++i)25 {26 cin >> names[i];27 M = max(M, (int)names[i].length());28 }29 sort(names, names + n);30 int cols = (maxl - M) / (M + 2) + 1, rows = (n - 1) / cols + 1;31 print("", 60, ‘-‘);32 puts("");33 for(int r = 0; r < rows; ++r)34 {35 for(int c = 0; c < cols; ++c)36 {37 int index = c * rows + r;38 if(index < n) print(names[index], c == cols-1 ? M : M+2, ‘ ‘);39 }40 puts("");41 }42 }43 44 return 0;45 }
UVa 400 (水题) Unix ls
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。