Description:http://acm.swust.edu.cn/problem/0254/
解题思路:先找出最大的煎饼,先翻转到最上面,最后翻转到最下层
AC代码:
#include<stdio.h> int time=0; int digit[1000]; void turn(int a,int b)//翻煎饼 { int i=a,j=b; while(i<j){ int t=digit[i]; digit[i]=digit[j]; digit[j]=t; i++; j--; } time++;//次数加一 } int Findmax(int a,int b)//找到最大元素的脚标 { int max,i; max=a; for(i=a+1;i<=b;i++) if(digit[i]>digit[max]) max=i; return max; } void change(int y)//先找出最大的数,先翻转到最上面,在翻转到最下层 { if(y==0) return; int maxn=Findmax(0,y); if(maxn!=0&&maxn!=y){ turn(0,maxn); turn(0,y); } else if(maxn==0) turn(0,y); change(y-1); } int main() { int N; scanf("%d",&N); int i; for(i=0;i<N;i++) scanf("%d",&digit[i]); change(N-1); printf("%d\n",time); // for(i=0;i<N;i++) // printf("%d ",digit[i]); return 0; }
时间: 2024-11-10 07:37:58