标签:
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!=‘\n‘) 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("\n"); 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\n"); 53 } 54 return 0; 55 }
题意:给出一些数列, 一次只能让第一个到第i个数列全部反转,要求把数列排序为升序。
标签:
原文地址:http://www.cnblogs.com/sunshinemxh/p/4832924.html