http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=341
排版问题 错了n次 注意除出来的列有可能为0 不处理为1 会RE 还有如果超过n个字符串 要break 有可能那一列不会满

1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 typedef struct node 5 { 6 char c[61]; 7 int k; 8 }st; 9 int main() 10 { 11 int n,j,i,max,q,d,g,y; 12 st x[101],t; 13 while(scanf("%d%*c", &n)!=EOF) 14 { 15 max = 0; 16 for(i = 0 ;i < n ; i++) 17 { 18 gets(x[i].c); 19 x[i].k = strlen(x[i].c); 20 if(max<x[i].k) 21 max = x[i].k; 22 } 23 d = 60/(max+2); 24 if(!d)//处理一下 25 d = 1; 26 if(n%d==0)//s算好 27 q = n/d; 28 else 29 q = n/d+1; 30 for(i = 0 ;i < n-1 ; i++) 31 for(j = 0 ; j < n-i-1 ; j++) 32 { 33 if(strcmp(x[j].c,x[j+1].c)>0) 34 { 35 t = x[j]; 36 x[j] = x[j+1]; 37 x[j+1] = t; 38 } 39 } 40 for(i = 1 ;i <= 60 ;i++) 41 printf("-"); 42 printf("\n"); 43 for(i = 0; i <q ; i++) 44 { 45 for(j = 0 ;j < d ;j++) 46 { 47 if(i+j*q>=n)//超过要跳出 48 break; 49 printf("%s",x[i+j*q].c); 50 if(j == d-1) 51 y = max-x[i+j*q].k; 52 else 53 y = max+2-x[i+j*q].k; 54 for(g = 1 ; g <= y; g++) 55 printf(" "); 56 } 57 printf("\n"); 58 } 59 } 60 return 0; 61 }