三种语言写汉诺塔(CC++MATLAB)

三种语言写汉诺塔(CC++MATLAB),第1张

喜欢matlab的伙伴可以关注一波,本博也是很热爱这个语言的。

解决汉诺塔问题其实只需要递归思想就可以了。

递归思想:

1. 将a杆上的n-1个圆盘都移到空闲的b杆上,并且满足上面的所有条件

 2. 将a杆上的第n个圆盘移到b上

3. 剩下问题就是将c杆上的n-1个圆盘移动到b上了


公式描述有点麻烦,用语言描述为:

1. 以b杆为中介,将前n-1个圆盘从X杆挪到c杆上(本身就是一个n-1的汉诺塔问题了!)

2. 将第n个圆盘移动到b杆上

3. 以a杆为中介,将c杆上的n-1个圆盘移到b杆上(本身就是一个n-1的汉诺塔问题了!)


假设有n个盘子,则将A柱子上的盘子移到C柱子上需要2的n次方-1.

题目简单,不多赘述。

C:

#include
int step=0;
void move(int n,char A,char B,char C){
	if(n==1){step++;}//最后一个盘子归位,结束 
	else{
		move(n-1,A,C,B);//将上面的n-1个盘子从A借助C移到B
		step++;//将第n个盘子从A移到C
		move(n-1,B,A,C);//再将上面的n-1个盘子从B借助A移到C
	}
}
int main(){
	int n;
	scanf("%d",&n);
	move(n,'A','B','C');//将n个盘子从A移到C(借助B) 
	printf("%d\n",step);
	return 0;
}

C++:

#include
using namespace std;
int step=0;
void move(int n,char A,char B,char C){
	if(n==1){step++;}//最后一个盘子归位,结束 
	else{
		move(n-1,A,C,B);//将上面的n-1个盘子从A借助C移到B
		step++;//将第n个盘子从A移到C
		move(n-1,B,A,C);//再将上面的n-1个盘子从B借助A移到C
	}
}
int main(){
	int n;cin>>n;
	move(n,'A','B','C');//将n个盘子从A移到C(借助B) 
	cout<

MATLAB:

clc;clear;
n=input('请输入n:');
hnt(n,1,2,3);%汉诺塔首拼hnt
function hnt(n,a,b,c)%a->b(借助c),与上面的有点差异,重在理解
if n==1
    fprintf('把第%d号盘子从%d->%d\n',n,a,b);
else
    hnt(n-1,a,c,b); 
    fprintf('把第%d号盘子从%d->%d\n',n,a,b);
    hnt(n-1,c,b,a);
end
end

好文章记得点赞啊,让更多的伙伴看到!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/717232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)