九连环问题

九连环是一种流传于山西省的传统民间的智力玩具,由九个圆环相连成串,以解开为胜。

题图1.jpg

九连环的九个环,一环扣一环地套在钗上。除了第 1 号环可以随时装上或卸下以外,其它环装上或卸下的条件是:在它的前面仅有紧靠它那一个环在钗上。即:当第 1 ~ i−2 号环都不在钗上,第 i−1 号环在钗上,这时可以装上或卸下第 i 号环。

输入格式

环数 操作(U表示装上, D表示卸下)

输出格式

装上或卸下九连环的操作步骤
每行显示一步操作,具体格式为:
环号: U或D (U表示装上,D表示卸下)

输入样例1
3 U

输出样例1
1: U
2: U
1: D
3: U
1: U

输入样例2
4 D

输出样例2
2: D
1: D
4: D
1: U
2: U
1: D
3: D
1: U
2: D
1: D

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
void fun(int n,char op)
{
    if(op=='U')
    {
        if(n==1)
        {
            printf("1: U\n");
            return ;
        }
        else if(n==2)
        {
            printf("1: U\n2: U\n");
            return ;
        }
        else
        {
            fun(n-1,'U');
            fun(n-2,'D');
            printf("%d: U\n",n);
            fun(n-2,'U');
        }
    }
    else if(op=='D')
    {
        if(n==1)
        {
            printf("1: D\n");
            return ;
        }
        else if(n==2)
        {
            printf("2: D\n");
            printf("1: D\n");
            return ;
        }
        else
        {
            fun(n-2,'D');
            printf("%d: D\n",n);
            fun(n-2,'U');
            fun(n-1,'D');
        }
    }
}
int main()
{
    int n;
    char a;
    scanf("%d %c",&n,&a);
    fun(n,a);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值