现在有三套圆盘并叠加放在一个柱子上了,请移动圆盘,使每个柱子上的圆盘都
按照相同的顺序从大到小的摆放好,也就是把三份盘子平均分开。请问对于 n 个不
同数量的圆盘(也就是共有 3*n 个盘子),分别在每个柱子上分好 n 个盘子,最少需
要移动多少步?
多层汉诺塔,很繁琐,不太理解
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 - 你可以看下这个问题的回答https://ask.csdn.net/questions/7433278
- 这篇博客也不错, 你可以看下习题 6.20 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。整数和n在主函数中输入。最后在主函数中输出。
- 除此之外, 这篇博客: 蒟蒻君的数学学习之路1:斐波那契数列的n种解法中的 🚀直接递归 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
#include <bits/stdc++.h> using namespace std; int f(int n) { if (n == 1 || n == 2) { return 1; } return f(n - 1) + f(n - 2); } int main() { int n; cin >> n; cout << f(n) << '\n'; return 0; }
- 以下回答由chatgpt基于相关博客总结生成:
根据题目要求,这是一个汉诺塔问题,目标是将n个圆盘从柱子A移动到柱子B和柱子C。根据提示2,可以使用递归思想来解决该问题。
首先,创建一个递归函数来实现移动圆盘的操作。函数love(n, start, help, end)的参数说明如下: - n代表当前需要移动的圆盘个数 - start代表初始柱子 - help代表中间柱子 - end代表目标柱子
下面是具体的解题代码:
void love(int n, char start, char help, char end) { if (n >= 2) { // 将A上的n-1个圆盘移动到C上 love(n - 1, start, end, help); // 将A上的最大圆盘移动到B上 printf("%c------>%c\n", start, end); // 将C上的n-1个圆盘移动到B上 love(n - 1, help, start, end); } else if (n == 1) { // 只剩下一个圆盘时直接移动到目标柱子上 printf("%c------>%c\n", start, end); } }
接下来,在主函数中输入圆盘的数量n,调用函数love(n, 'A', 'B', 'C')即可求解移动步数的最优解。
int main(void) { int n = 0; printf("输入圆盘的数量:"); scanf("%d", &n); love(n, 'A', 'B', 'C'); return 0; }
以上就是求解移动步数的最优解的具体代码。
本回答被专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 C#连接不上服务器,
- ¥15 angular项目错误
- ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
- ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
- ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
- ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
- ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
- ¥200 csgo2的viewmatrix值是否还有别的获取方式
- ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
- ¥15 请把下列每一行代码完整地读懂并注释出来