【算法分析】
九连环游戏的历史非常悠久,据说起源于战国时期。
九连环由九个相互连接的环组成,这九个环套在一个中空的长形柄中。
九连环的玩法是要将这九个环从柄上解下来。解下所有九个环需要解341步,因此人们需要有耐心。
九连环的游戏规则:
(1)第 1 环可以自由上下;
(2)而上/下第 n 环时(n>1),则必须满足:(a)第 n-1 个环在架上;(b)前 n-2 个环全部在架下。
【算法代码】
对于给定的n,拆解完n连环的步数如下表所示:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
步数 | 1 | 2 | 5 | 10 | 21 | 42 | 85 | 170 | 341 | 682 | 1365 |
本代码可用于解决n连环问题。
#include <bits/stdc++.h>
using namespace std;
int step;
void UpRing(int n);
void DownRing(int n);
void UpRing(int n){ //上环函数
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
printf("%d:上第%d个环\n",++step,n);
if(n>2) UpRing(n-2);
}
void DownRing(int n){ //下环函数
if(n>2) DownRing(n-2);
printf("%d:下第%d个环\n",++step,n);
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
int main(){
int n;
scanf("%d",&n);
printf("安装%d连环的步骤\n",n);
step=0;
UpRing(n);
printf("拆解%d连环的步骤\n",n);
step=0;
DownRing(n);
printf("结束\n");
return 0;
}
/*
in:
3
out:
安装3连环的步骤
1:上第1个环
2:上第2个环
3:下第1个环
4:上第3个环
5:上第1个环
拆解3连环的步骤
1:下第1个环
2:下第3个环
3:上第1个环
4:下第2个环
5:下第1个环
结束
*/
【参考文献】
https://blog.csdn.net/weixin_43418664/article/details/83904826
https://blog.csdn.net/laoyang360/article/details/7857911
https://zhuanlan.zhihu.com/p/79226500
https://www.sohu.com/a/150145539_372450
https://haokan.baidu.com/v?pd=wisenatural&vid=13884581494855320361
https://blog.csdn.net/Catherinezxc/article/details/111938266