UVA400 Unix ls

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=341

排版问题 错了n次 注意除出来的列有可能为0 不处理为1 会RE 还有如果超过n个字符串 要break 有可能那一列不会满

View Code
 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 }
原文地址:https://www.cnblogs.com/shangyu/p/2600378.html