首页 > 代码库 > 翻煎饼(swust oj 0254)

翻煎饼(swust oj 0254)

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;}

 

翻煎饼(swust oj 0254)