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 }