• c++ 木块问题


    /*
    Sample Input
    输入示例

    10
    move 9 onto 1
    move 8 over 1
    move 7 over 1
    move 6 over 1
    pile 8 over 6
    pile 8 over 5
    move 2 over 1
    move 4 over 9
    quit


    Sample Output
    输出示例

    0: 0
    1: 1 9 2 4
    2:
    3: 3
    4:
    5: 5 8 7 6
    6:
    7:
    8:
    9:


    */

    #include<cstdio>
    #include<string>
    #include<vector>
    #include<iostream>
    using namespace std;
    const int maxn =30;
    int n;
    vector<int> pile[maxn];//每个pile[i]是个vector
    //找木块a所在的pile和height,以引用的形式返回调用者
    //a 是需要查找的元素,p是索引为p的木块,h是高度
    void find_block(int a,int &p,int &h){
        for(p=0;p<n;p++)
            for(h=0;h<pile[p].size();h++)
                if(pile[p][h]==a) return;
    }
    //把第p堆高度为h的木块上方的所有木块移回原位
    void clear_above(int p,int h){
            for(int i=h+1;i<pile[p].size();i++){
                int b=pile[p][i];
                pile[b].push_back(b);//木块放回原位
            }
            pile[p].resize(h+1);//pile只应保留下标为0到h的元素
    }
    //把第p堆高度为h及其上的木块整体移到p2的堆上的顶部
    void pile_onto(int p,int h,int p2){
        for(int i=h;i<pile[p].size();i++)pile[p2].push_back(pile[p][i]);
        pile[p].resize(h);
    }
    //输出的函数
    void print(){
        for(int i=0;i<n;i++){
            printf("%d:", i);
            for(int j=0;j<pile[i].size();j++) printf(" %d",pile[i][j]);
            printf(" ");
        }
    }
    int main(){
        int a,b;
        cin >>n;
        string s1,s2;
        //初始化
        for(int i=0;i<n;i++)pile[i].push_back(i);
        while(cin>>s1&&s1!="quit"){
            cin>>a>>s2>>b;
            int pa,pb,ha,hb;
            find_block(a,pa,ha);
            find_block(b,pb,hb);
            if(s1=="quit")break;
            if(pa==pb)continue;//非法指令
            if(s2=="onto")clear_above(pb,hb);
            if(s1=="move")clear_above(pa,ha);
            pile_onto(pa,ha,pb);
        }
        print();
        return 0;
    }

  • 相关阅读:
    quart源码阅读(一)
    Python poll IO多路复用
    Python select IO多路复用
    谁才是真正的垃圾:判断对象的可触及性
    Java的四种引用之强弱软虚
    JVM的基本结构及其各部分详解(二)
    JVM的基本结构及其各部分详解(一)
    java面试笔试题收集
    看懂Class文件的装载流程
    java单例模式
  • 原文地址:https://www.cnblogs.com/qingtianBKY/p/6657906.html
Copyright © 2020-2023  润新知