uva 120 煎饼堆
来源:互联网 发布:爱淘宝店 编辑:程序博客网 时间:2024/04/27 20:17
#include<stdio.h>#include<string.h>#include<stdlib.h>int cmp(const void*a,const void*b){return *(int*)a-*(int*)b;}int l,max,b[40],asc[40];char bing[510];void turn(int end){int i;char tmp;if(end==1){tmp=b[0];b[0]=b[1];b[1]=tmp;return;}for(i=0;i<=end/2;i++){tmp=b[i];b[i]=b[end-i];b[end-i]=tmp;}}int main(){int i,j,k,m,n,end;memset(b,0,sizeof(b));while(gets(bing)!=NULL) //gets读入EOF时返回NULL{if(bing[0]==0)continue;puts(bing);memset(asc,0,sizeof(asc));max=strlen(bing);int c=0;for(i=0;i<max;i=i+1){if(bing[i]==32){c++;}else{b[c]=b[c]*10+bing[i]-48;}}end=c;l=c+1;memcpy(asc,b,sizeof(b));qsort(asc,l,sizeof(int),cmp);m=l-1;//m是最大值的位置,即翻转后最大值应在的位置,每次先把最大值翻转到0位置,在翻转到mwhile(end>0){max=asc[m];int e=0;for(k=0;k<l;k++){if(b[k]!=asc[k]){e=1;break;}}if(!e)break;for(i=0;i<=end;i++){if(b[i]==max){if(i==m){m--;end--;}else if(i==0){turn(m);printf("%d ",l-m);m--;end--;}else{turn(i);turn(m);printf("%d %d ",l-i,l-m);m--;end--;}break;}}}printf("0\n");memset(b,0,sizeof(b));}return 0;}// 8 4 6 7 5 2//2 2 3 3 3 2 2 3 2