题目描述
九连环是一种源于中国的传统智力游戏,有九个金属环套在上方一个由金属丝做成的环杆上,并且互相牵连。
九个环从左到右依次为 ~1~9,每个环有两种状态:1 和 0,1 表示环在杆上,0 表示环不在杆上。
初始状态是九个环都在杆上,即:111111111,目标状态是九个环都不在杆上,即:000000000,下图中的状态为 110000000。
由初始状态到目标状态的变化规则是:
- (1)第一只环为无论何时均可自由上下横行;
- (2)第二只环只有在第一环为 1 时,才能自由上下;
- (3)想要改变第 n(n>2)个环的状态,需要先使第一到第( n-2 )环均为下杆,且第 n 1 个环为上杆,而与第n+1 个到第九环状态无关;
- (4)每改变一个环,记为一步。
输入
输入有若干行,每行一个整数 i 。
输出
输出若干行,每行仅包含中间第 i步的状态。如果输入的步数大于实际变换所需的步数,则输出-1。
AC代码
#include<iostream>
using namespace std;
int step,num;
string e_nd="100000000";
string st_a="111111111";
string ans[500]={"111111111"};
void turn(int n){
if(e_nd==st_a) return;
if(st_a[n-1]=='0') turn(n-1);
for(int i=n-2;i>=1;i--){
if(st_a=='1')turn(i);
}
st_a[n]=(st_a[n]=='1'?'0':'1');
ans[++step]=st_a.substr(1,9);
}
int main(){
cin>>a>>num;
for(int i=9;i>1;i--){
turn(i);
}
if(a>step) cout<<-1<<endl;
else cout<<ans[a]<<endl;
return 0;
}
运行结果(暂不展示)
完结撒花✿✿ヽ(°▽°)ノ✿
众所周知,只要用你那招财的小手为我点上一个免费的赞,你将会得到一串代码:
age=18;
while(true){
happy++,luck++,unhappy--;
}