zoukankan      html  css  js  c++  java
  • UVa 120

    题意:给一摞随意摞的煎饼,要按直径从上到下递增的顺序排列,求翻的顺序。

    思路:贪心。

    1,读取煎饼数据,新建一个数组,复制数据,排序,作为参考。

    2,从最大直径(maxNum)的煎饼开始,看其是否在底层,是的话就寻找上一层最大的。

    3,假如不在底层,看其在不在顶层,在顶层就把全部煎饼翻过来,使当前需要操作的最大的直径煎饼放在最下。

    4,假如不在底层也不在顶层,就找到它,先翻到顶层,然后步骤同3.

    直到maxNum代表数据为最小直径的煎饼。

    代码:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    using namespace std;
    #define MAXN 110
    
    class Flapjacks{
        private:
            int jacks[MAXN];
            int ansJack[MAXN+MAXN];
            int ansLoop;
        public:
            void init();
            void process();
            void reserv(int a[],int num);//反转数组操作,num为反转位置
            void output();
    };
    void Flapjacks::reserv(int a[],int num){
        int tempArry[num];
        for(int loop1 = num - 1,loop2 = 0;loop1 >= 0;loop1--){
            tempArry[loop2++] = a[loop1];
        }
        for(int loop1 = 0;loop1 < num;loop1++){
            a[loop1] = tempArry[loop1];
        }
    }
    void Flapjacks::init(){
        memset(jacks,0,sizeof(jacks));
    }
    void Flapjacks::process(){
        int loop = 0,n;
        char c;
        while(scanf("%d%c",&n,&c)!=EOF){
            if(c != '
    '){
                printf("%d ",n);
                jacks[loop++] = n;
    
            }
            else {
                jacks[loop++] = n;
                cout<<n<<endl;
                int clon[MAXN],maxNum;
                for(int i = 0;i < loop;i++)
                    clon[i] = jacks[i];
                sort(clon,clon + loop);
                ansLoop = 0;
                ansJack[0] = 0;
                for(int i = loop - 1;i >= 0;i--){
                    maxNum = clon[i];//maxNum 记录当前未正确归位的煎饼
                    if(maxNum == jacks[i]){
                        continue;
                    }
                    else{
                        if(jacks[0] == maxNum){//需要操作的煎饼在最上边时的操作
                            reserv(jacks,i+1);//从loop - i处反转
                            ansJack[ansLoop++] = loop - i;
                        }
                        else{
                            for(int j = 0;j < loop;j++){//需要操作的煎饼在不最上边时的操作
                                if(jacks[j] == maxNum){
                                    reserv(jacks,j+1);
                                    ansJack[ansLoop++] = loop - j ;
                                    break;
                                }
                            }
                            reserv(jacks,i+1);
                            ansJack[ansLoop++] = loop - i;
                        }
                    }
                }
                output();
                loop = 0;
                init();
            }
    
        }
    }
    void Flapjacks::output(){
        for(int i = 0;i < ansLoop;i++){
            cout<<ansJack[i]<<" ";
        }
        cout<<0<<endl;
    }
    
    int main()
    {
        //#ifndef ONLINE_JUDGE
        //    freopen("D:\acm.txt","r",stdin);
       // #endif // ONLINE_JUDGE
        Flapjacks flapjacks;
        flapjacks.process();
        return 0;
    }
    Donghua University
  • 相关阅读:
    每天进步一点点之查找
    每天进步一点点之堆栈思想
    每天进步一点点之大端存储和小端存储
    每天进步一点点之线性表的考察
    每天进步一点点之出栈顺序考点
    React Native 混合开发与实现
    谈谈JavaScript异步代码优化
    谈谈前端异常捕获与上报
    vue插件编写与实战
    vue项目构建与实战
  • 原文地址:https://www.cnblogs.com/ohxiaobai/p/4491280.html
Copyright © 2011-2022 走看看