zoukankan      html  css  js  c++  java
  • 山理校赛 E 九连环

    Problem Description

    不知道大家有没有玩过一个叫做 九连环 的玩具,如下图所示。

    如果你不了解九连环,那玄黄就带你领略九连环的奥妙: 
    九连环是我国传统的民间智力玩具,玩具上面有九个连环套在杆上,目标就是通过一定的方式将九个连环从杆上全部取下来。 
    玩法是这样的: 
    1、对每个环,有2种操作:把这个环放到杆上或把这个环从杆上取下 
    2、你可以随意的对第1个环进行操作 
    3、如果你想对第i个环(i>1)进行操作,你必须将第i-1个环放在杆上,且必须把前i-2个环从杆上取下

    Input

    输入一个整数n ( 0<n<10 ),代表杆上面的连环个数。

    Output

    输出把所有连环取下来的最少操作步骤,每一步占一行,输出一个整数i和操作”UP”或者”DOWN”,代表将第i个环放到杆上或从杆上取下来,整数和操作用空格分开。详情见示例输出。

    Sample Input

    4

    Sample Output

    2 DOWN
    1 DOWN
    4 DOWN
    1 UP
    2 UP
    1 DOWN
    3 DOWN
    1 UP
    2 DOWN
    1 DOWN

    Hint

     

    Source

    玄黄

    没有玩过九连环,高中同学到是会玩九连环。

    写完了还是不理解为什么第一个环还在上面就可以把第二个环取下来。

    大致类似于汉诺塔。这种想要处理第n个环就要把前面的n-1个环处理好,而且n还不大,很明显写个递归就可以了。

    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<queue>
    using namespace std;
    
    int tmp[15] = {1,1,1,1,1,1,1,1,1,1,1,1};
    
    void f(int d){
        if(tmp[d-1]);
        else f(d-1);
        for(int i=d-2;i>=1;i--){
            if(tmp[i])f(i);
        }
        if(tmp[d]){
            printf("%d DOWN
    ",d);
            tmp[d] = 0;
        }else {
            printf("%d UP
    ",d);
            tmp[d] = 1;
        }
    }
    int main(){
        int n;
        scanf("%d",&n);
        for(int i=n;i>=1;i--)
            f(i);
    
        return 0;
    }
    View Code
  • 相关阅读:
    TestNG详解-深度好文
    自动化测试用例getText()获取某一个元素的值返回null或空
    Python装饰器
    工资管理系统
    并发,并行
    TCP/IP协议
    tcp长连接和短连接
    tcp注意点
    文件下载器
    tcp服务器
  • 原文地址:https://www.cnblogs.com/kongbb/p/10927657.html
Copyright © 2011-2022 走看看