UVA120Stacks of Flapjacks

纠结了好几个小时 不明白哪错了 跟别人的代码仔仔细细的对照才发现题目要求把原来的数据再输出一遍 石化。。

选择排序的思想 每次找到最大的那个数将它放在该放的位置

输入用字符串 再转化成数字

UVA就是麻烦 来来回回的逆转 都转晕了

View Code
 1 #include <stdio.h>

 2 #include <stdlib.h>

 3 #include<string.h>

 4 int n ;

 5 void deal(char *s,int *a)

 6 {

 7     int begin,end,len=strlen(s);

 8     n=0;

 9     begin=0;

10     end=begin;

11     while(end<len)

12     {

13        while(s[end]!=' '&&s[end]!=0)

14        end++;

15        int t=0;

16        while(begin<end)

17        {

18           t*=10;

19           t+=s[begin]-'0';

20           begin++;

21        }

22        n++;a[n]=t;

23        begin=end+1;

24        end=begin;

25     }

26 }

27 int main()

28 {

29     int i, j, p[65],x[65],r[165],g, t, k, m,a[65];

30     char c[60];

31     while(gets(c)!=NULL)

32     {

33         deal(c,p);

34         for(i = 1 ; i <= n ; i++)

35         {

36             if(i!=1)

37             printf(" ");

38             printf("%d", p[i]);

39         }

40         puts("");

41         for(i = 1;i <= n;i++)

42         {

43             x[n-i+1]=p[i];

44         }

45         g = 0;

46         for(i = 1 ; i < n ; i++)

47         {

48             int max = 0;

49             for(j = i ; j <= n ; j++)

50             if(max<x[j])

51             {

52                 max = x[j];

53                 k = j;

54             }

55             if(k!=i)

56             {

57                 if(k!=n)

58                 {

59                    r[g++] = k;

60                    int begin=k,end=n;

61                   while(begin<=end)

62                   {

63                    t=x[begin];

64                    x[begin]=x[end];

65                    x[end]=t;

66                    begin++;

67                    end--;

68                   }

69                 }

70                 r[g++] = i;

71                int begin=i,end=n;

72                 while(begin<=end)

73                 {

74                    t=x[begin];

75                    x[begin]=x[end];

76                    x[end]=t;

77                    begin++;

78                    end--;

79                 }

80             }

81         }

82         for(i = 0 ; i < g ; i++)

83         printf("%d ", r[i]);

84         printf("0\n");

85     }

86     return 0;

87 }

 

你可能感兴趣的:(stack)