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 }

 

你可能感兴趣的:(unix)