Uva120 Stacks of Flapjacks

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int a[31],n;
 6 
 7 void rev(int ct) {
 8     printf("%d ", n-ct);
 9     for (int i=0;i<=ct/2;++i)
10         swap(a[i],a[ct-i]);
11 }
12 
13 int scan()
14 {
15     char ch=0;
16     memset(a,0,sizeof(a));
17     if(scanf("%d",&a[0])==EOF)
18         return 0;
19     int i=1;
20     while((ch=getchar())&&ch!='
')
21         scanf("%d",&a[i++]);
22     return i;
23 }
24 int main()
25 {
26     while(n=scan())
27     {
28         printf("%d",a[0]);
29         for(int i=1;i<n;++i)
30             printf(" %d",a[i]);
31         printf("
");
32         int cnt=n;
33         while(cnt)
34         {
35             int maxn=0,flag;
36             for (int i=0;i<cnt;++i)
37             {
38                 if (a[i]>maxn)
39                 {
40                     maxn=a[i];
41                     flag=i;
42                 }
43             }
44             if(flag!=cnt-1)
45             {
46                 if(flag!=0)
47                     rev(flag);
48                 rev(cnt-1);
49             }
50             cnt--;
51         }
52         printf("0
");
53     }
54     return 0;
55 }

题意:给出一些数列, 一次只能让第一个到第i个数列全部反转,要求把数列排序为升序。

原文地址:https://www.cnblogs.com/sunshinemxh/p/4832924.html