标签:2021.1 count 15 int hanoi 汉诺塔 盘子 移动
问题描述:
目的:塔 1 上的所有盘子移动到塔 3 上。
要求:1、一次只能移动一个盘子。
2、大盘子不能放到小盘子上面。
请解决以下问题:
子任务 1:所需最少步数。
子任务 2:具体操作步骤。
子任务 3:分析代码的时间复杂度。
子任务 4:令 F(n)表示 n 个盘子的最少操作步数,推导 F(n)递推式、通项公式。
子任务 5:双色汉诺塔。在原有规则的基础上,第奇数个和第偶数个盘子分别具有不同的颜 色,任意时刻同色的盘子不能放在一起。
编程要求:
输入:一个整数 n,表示初始塔 1 上的盘子数量。
输出:首先输出最少步数,然后输出具体方案。你可以以任意方式输出。
解:
第一步:
把n-1个模块从塔1移动到塔2
把第n个模块从塔1移动到塔3
第二步:
把n-1个模块从塔2移动到塔3
#include<stdio.h>
int count=0;
void hanoi(int n,int a,int b,int c){
if(n==1){
printf("%d移动到%d\n",a,c);count++;
}else{
hanoi(n-1,a,c,b);
printf("%d移动到%d\n",a,c);count++;
hanoi(n-1,b,a,c);
}
}
int main(){
int n=3,a=1,b=2,c=3;
hanoi(n,a,b,c);
printf("一共需要%d步",count);
return 0;
}
复杂度为O(2^n)
大佬讲解
1.1递归与基本汉诺塔问题_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
标签:2021.1,count,15,int,hanoi,汉诺塔,盘子,移动 来源: https://blog.csdn.net/littlelittleR/article/details/112658969
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。