题意:
有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 }