【题解】九连环

题目描述

        九连环是由九个彼此套接的圆环和一根横杆组成,九个环从左到右依次为1-9,每个环有两种状态:1和0。1表示环在杆上,0表示环不在杆上。初始状态是九个环都在杆上,即:111111111,目标状态是九个环都不在环上,即:000000000,由初始状态到目标状态的变化规则是:

        (1)第一环为无论何时均可自由上下横行;

        (2)第二只环只有在第一环为1时,才能自由上下;

        (3)想要改变第n(n>2)个环的状态,需要先使第一到第(n-2)环均为下杆,且第n-1个环为上杆,而与第N+1个到第九环状态无关。

        (4)每改变一个环,记为一步。

        现在九连环由111111111变到000000000,求中间第I步的状态。

输入输出格式

输入格式

        一行,仅包含一个整数i。

输出格式

        一行,仅包含中间第i步的状态。如果输入的步数大于实际变换所需的步数,则输出-1。

输入输出样例

输入样例

2

输出样例

010111111

题解

        根据题意模拟即可。

#include<iostream>

using namespace std;

int I;
int a[10]={1,1,1,1,1,1,1,1,1,1};

void Work(int obj)
{
    if(!I) return;
    
    if(!a[obj-1]) Work(obj-1);
    for(int i=obj-2;i>=1;i--)
    {
        if(a[i]) Work(i);
    }
    
    if(!I) return;//防止某些情况
    I--;
    a[obj]=(a[obj]+1)%2;
}


int main()
{
    cin>>I;
    
    for(int i=9;i>=1;i--)
    {
        if(a[i]) Work(i);
    }
    
    if(!I)
    {
        for(int i=1;i<=9;i++)
        {
            cout<<a[i];
        }
    }
    else
    {
        cout<<-1;
    }
    
    return 0;
}
参考程序

猜你喜欢

转载自www.cnblogs.com/kcn999/p/10463848.html
今日推荐