UVa 400 Unix Is

题意:给出n个字符串,按照字典序排列,再按照规则输出。

===学习的紫书,题目意思很清楚,求列数和行数最开始看的时候木有看懂啊啊啊

列数:即为(60-M)/(M+2)+1;即为先将最后那一列减去,算普通的有多少列,算完了再加上最后一列

行数:可以用紫书里面的(n-1)/cols+1,也可用ceil函数

再将坐标对应成第几个字符串算出来,是像这个图的箭头标示的从上到下-

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring>  
 4 #include<algorithm>
 5 #include<math.h>  
 6 using namespace std;
 7 
 8 const int maxcol=60;
 9 const int maxn=100+5;
10 string filenames[maxn];
11 
12 void print(const string &s,int len,char extra)
13 {
14     cout<<s;
15     for(int i=0;i<len-s.length();i++)
16     cout<<extra;
17 }
18 
19 int main()
20 {
21     int n;
22     while(cin>>n)
23     {
24         int M=-5;
25         for(int i=0;i<n;i++) 
26         {
27             cin>>filenames[i];
28             M=max(M,(int)filenames[i].length());
29         }
30         int cols,rows;
31         cols=(maxcol-M)/(M+2)+1;
32         rows=ceil((1.0)*n/cols);
33     
34         sort(filenames,filenames+n);
35         print("",60,'-');
36         printf("\n");
37         
38         for(int i=0;i<rows;i++)//行数 
39         {
40             for(int j=0;j<cols;j++)//列数 
41             {
42                 int idx=j*rows+i;
43                 if(idx<n) 
44                 print(filenames[idx],j==cols-1 ? M : M+2,' ');
45             }
46             printf("\n");
47         }                
48     }
49 }
View Code

 

posted @ 2015-02-22 17:38  sequenceaa  阅读(154)  评论(0编辑  收藏  举报