UVa 400 - Unix ls
2014-03-04 22:46
351 查看
题目链接:UVa 400 - Unix ls
题目本身不难,困难的地方在输出,感觉这题目没啥意思。
简单地说一下怎么计算行数和列数。
列数:想象最后一列也是最长文件名长度+2,那么对应的行长度60也得+2,这样显然就很容易计算了。
行数:首先想到肯定是N/列数,仔细想想其实这是“满”的时候,那么不满的时候应该是(N/列数)+1,结合着两种情况可以发现都可以用((N-1)/列数)+ 1表示,化简一下就有了代码中计算行数的式子。
注意一下strlen的返回值是size_t类型的,想用max时候需要强制转换为int类型的。
题目本身不难,困难的地方在输出,感觉这题目没啥意思。
简单地说一下怎么计算行数和列数。
列数:想象最后一列也是最长文件名长度+2,那么对应的行长度60也得+2,这样显然就很容易计算了。
行数:首先想到肯定是N/列数,仔细想想其实这是“满”的时候,那么不满的时候应该是(N/列数)+1,结合着两种情况可以发现都可以用((N-1)/列数)+ 1表示,化简一下就有了代码中计算行数的式子。
注意一下strlen的返回值是size_t类型的,想用max时候需要强制转换为int类型的。
#include <iostream> #include <algorithm> #include <cstring> #include <stdio.h> #include <iomanip> using namespace std; const int MAX_N = 100 + 10; const int MAX_M = 60 + 5; int cmp(const void *_a,const void *_b) { char *a = (char*)_a; char *b = (char*)_b; return strcmp(a,b); } int N; char c[MAX_N][MAX_M]; int len; int main() { while(cin>>N) { len = 0; for(int i = 0;i < N;i++) { cin>>c[i]; len = max(len,(int)strlen(c[i])); } qsort(c,N,sizeof(c[0]),cmp); cout<<"------------------------------------------------------------"<<endl; int _len = len + 2; int _col = (60 + 2) / _len; int _row = (N + _col - 1) / _col; for (int i = 0; i < _row; i++) { for (int j = 0; j < _col; j++) { if (j * _row + i < N) cout<<left<<setw(_len)<<c[j * _row + i]; } cout<<endl; } } return 0; }
相关文章推荐
- 例题5-8 Unix ls 命令 UVa400
- uva 400 Unix ls 文件输出排版 排序题
- UVa 400 - Unix ls
- uva 400 - Unix ls
- UVA400-Unix的ls命令
- UVa--400 Unix ls(格式输出)
- Unix ls UVA400
- uva 400 Unix ls 文件输出排版 排序题
- UVA 400-Unix ls【字符串】
- Uva400 Unix ls 【排序+技巧】【例5-8】
- uva 400 Unix ls
- Uva 400 - Unix ls
- 【UVa 400】Unix ls
- UVa 400 Unix ls(排序+输出控制)
- UVa400 Unix ls
- uva 400 - Unix ls
- uva 400 Unix ls 127页
- uva 400 Unix ls
- UVa_400 - Unix ls
- UVA_400: Unix ls