1.游戏规则
汉诺塔的游戏规则有两个
1:一次只能移动一个盘子
2:大盘子不能在小盘子上面
2.解题思路
相同的方法,我们定义的盘子越大,挪动的次数也会几何倍数的增加
1层:1次 2层:3次 3层:7次 4层:15次 5层:31次 6层:63次 7层:127次 8层:255次 9层:511次
计算公式:f(x)=2^x-1 X指的是盘子
3.代码实现
#include<stdio.h> // 引入标准输入输出库
// 定义一个函数,用于打印两个字符之间的移动
void move(char a, char b)
{
printf("%c-->%c\n", a, b); // 打印从字符a到字符b的移动
}
// 定义一个递归函数,用于实现汉诺塔的移动
void Hant(int n, char A, char B, char C)
{
if (n == 1) // 如果只有一个盘子
{
move(A, C); // 则直接将盘子从A移动到C
}
else // 如果有多个盘子
{
Hant(n - 1, A, C, B); // 先将n-1个盘子从A移动到B,使用C作为辅助塔
move(A, C); // 然后将第n个盘子从A移动到C
Hant(n - 1, B, A, C); // 最后将n-1个盘子从B移动到C,使用A作为辅助塔
}
}
int main() // 主函数入口
{
int n = 0; // 初始化盘子数量为0
printf("请输入汉诺塔的盘子数量:"); // 提示用户输入盘子数量
scanf("%d", &n); // 从标准输入读取用户输入的盘子数量
Hant(n, 'A', 'B', 'c'); // 调用Hant函数,开始汉诺塔的移动过程
return 0; // 主函数返回0,表示程序正常结束
}