题目描述
九连环是由九个彼此套接的圆环和一根横杆组成,九个环从左到右依次为l~9,每个环有两种状 态:1和0,1表示环在杆上,0表示环不在杆上。初始状态是九个环都在杆上,即:111111111,目标状态是九个环都不在杆上,即:000000000,由初始状态到目标状态的变化规则是:
(1)第一环为无论何时均可自由上下横行;
(2)第二只环只有在第一环为1时,才能自由上下;
(3)想要改变第n(n>2)个环的状态,需要先使第一到第(n-2)环均为下杆,且第n-1个环为上杆,而与第n+l个到第九环状态无关;
(4)每改变一个环,记为一步。
现在九连环由111111111变到000000000,求中间第i步的状态。
输入
仅包含一个整数i。
输出
仅包含中间第i步的状态。如果输入的步数大于实际变换所需的步数,则输出-1。
样例输入 Copy
【样例1】 2 【样例2】 500
样例输出 Copy
【样例1】 010111111 【样例2】 -1
#include <bits/stdc++.h> using namespace std; int cnt, st[10]={1,1,1,1,1,1,1,1,1,1}; void f(int num) { if(cnt == 0) return; // rule 2,3 if(!st[num - 1]) f(num - 1); for(int i = num - 2; i >= 1; i--) if(st[i]) f(i); if(cnt == 0) return; // change the current one st[num] = 1 - st[num]; // rule 4 cnt--; } int main() { cin >> cnt; for(int i = 9; i >= 1; i--) f(i); if(cnt == 0) for(int i = 1; i <= 9; i++) printf("%d",st[i]); else if(cnt > 0) puts("-1"); return 0; }

1930

被折叠的 条评论
为什么被折叠?



