当前位置:首页 » 编程语言 » c语言汉诺塔

c语言汉诺塔

发布时间: 2022-02-01 08:22:36

‘壹’ c语言汉诺塔 。 哪里错了呢

把move函数移到外面去吧。 C语言中没有嵌套的函数。
如下:
void han(int n, char one,char two,char three)
{
void move(char x,char y); /*move 函数的申明*/
if(n==1) move(one,three);
else
{ han(n-1,one,three,two);

move(one,three);

han(n-1, two,one,three);}
}

void move(char x, char y)
{
printf("%c-->%c\n",x,y);
}

‘贰’ c语言汉诺塔

void move( char x, char y )

{
printf( "%c ---> %c\n", x, y );
}

void hanoi( int n, char one, char two, char three )

{
if ( n == 1 ) move( one , three )

else

{
hanoi( n - 1, one , three, two );

move( one, three );

hanoi( n - 1, two, one, three );
}
}

‘叁’ c语言汉诺塔.

# include <stdio.h>

void hannuota(int n,char A,char B, char C);

int main(void)
{

char ch1 = 'A';
char ch2 = 'B';
char ch3 = 'C';
int n;

printf("请输入要移动的盘子的个数:");
scanf("%d",&n);

hannuota(n,'A','B','C');

return 0;
}

//将A柱子上的n个盘子借助于B移动到C柱子上,
//每次移动时,必须保证大盘子在小盘子下面
//最大值不能是64
void hannuota(int n,char A,char B,char C)
{
/*
如果是1个盘子
直接将A柱子上的盘子从A移动到C
否则
先将A柱子上的n-1个盘子借助于C从A移动到B
直接将A柱子上的盘子从A移动到C
最后将B柱子上的n-1个盘子借助于A从B移动到C
*/

if (1 == n)
{
printf("将编号为%d的盘子从%c柱子移动到%c柱子\n",n,A,C);
}
else
{
hannuota(n-1,A,C,B);
printf("将编号为%d的盘子从%c柱子移动到%c柱子\n",n,A,C);
hannuota(n-1,B,A,C);

}
}

/*
在vc++6.0中的输出结果:
------------------
请输入要移动的盘子的个数:3
将编号为1的盘子从A柱子移动到C柱子
将编号为2的盘子从A柱子移动到B柱子
将编号为1的盘子从C柱子移动到B柱子
将编号为3的盘子从A柱子移动到C柱子
将编号为1的盘子从B柱子移动到A柱子
将编号为2的盘子从B柱子移动到C柱子
将编号为1的盘子从A柱子移动到C柱子
-------------------
*/

/*
供参考! 呵呵
*/

‘肆’ C语言汉诺塔

根据汉诺塔的游戏规则可知,若只有一个盘子,则只要直接搬运就可以了,其它的不需要再做。return语句的作用,就是遇到它时,程序直接返回到调用它的地方,不再执行此函数中return语句以后的代码。

不过这里这个return语句也可以不写,只是代码要稍作更改(代码的执行还是不变的,即与更改前完全等价):

voidhanNuoTa(intn,charfrom,charto,charhelper)
{
if(n==1)
{
printf("%c--->%c ",from,to);
}
else
{
hanNuoTa(n-1,from,helper,to);
printf("%c--->%c ",from,to);
hanNuoTa(n-1,helper,to,from);
}
}

‘伍’ C语言汉诺塔问题

哥们,你还没明白什么叫递归,用tc单步执行一遍看看你就会明白了,这里说太麻烦。

‘陆’ C语言,汉诺塔问题

return表示towers函数直接返回 不再往下走了
因为n=1时已经得到最终结果了,不需要再继续递归了
所以直接return 退出towers函数

‘柒’ C语言汉诺塔程序

将以下内容全部复制到新建的源文件中:(本人自己写的,因为你那课本上的代码,没解释,书写不规范,很难理解清楚,所以我直接新写了一个完整的代码,附带详细说明)
#include <stdio.h>
//汉诺塔x层塔从A塔整体搬到C塔,中间临时B塔。
//x层塔是从大到小往上叠放。每次移动只能移动一层塔。并且在移动过程中必须保证小层在上边
//借助B塔可以将x层塔全部从A搬到C上,并且符合要求(在移动过程中大的那块在下边,小的那块在上边)
int main()
{
void tower(int x,char a,char b,char c); //声明函数
int x=5,a='A',b='B',c='C'; //x表示有5层塔,具体要多少层自己修改这个值。abc分别表示ABC塔。

tower(x,a,b,c); //x层塔从a移动到c的全过程,主程序只有这条有效语句

return 0;
}

//以下是tower函数的定义
//参数解析:x层塔放在a上,b是中间塔,c是目标塔。即x层塔要从a搬到c上。
//此函数实现x层塔从a整体转移到c上。以及这个过程是怎么搬的全部过程。
void tower(int x,char a,char b,char c)
{
if(x==1)printf("将%d从%c放到%c\n",x,a,c); //只有1层塔时,直接从a搬到c上。
else //不止1层塔,则先将x-1层塔从a按照规律搬到b上,再将最后一块从a搬到c上,最后再将b上的x-1层塔按照规律搬到c上。
{
tower(x-1,a,c,b); //先将x-1层塔从a按照规律搬到b上,注意参数b放在最后,因为放在最后的参数是准备搬过去的目标塔。
printf("将%d从%c放到%c\n",x,a,c); //将最后一块从a搬到c上
tower(x-1,b,a,c); //最后再将b上的x-1层塔按照规律搬到c上,注意参数b放在开头,因为x-1层是要从b上搬过去的。
}
}

‘捌’ C语言关于汉诺塔的小程序

void main()
{
int n;
printf("please input number: ");
scanf("%d",&n);
printf("the stemp is :\n");
hounit(n,'a','b','c');
}没有太大问题 下次注意一点就行了 n前面一定要加上&

‘玖’ 用C语言编汉诺塔

a,b,c就表示三个杆子而已,你写d,e,f也没什么啊,这个就不用纠结了

‘拾’ C语言--汉诺塔程序执行步骤

这个问题你要先把递归搞懂才能理解的, 最好是单跟踪执行一下, 我这里就简单说一下吧!
hanoi(5, 'a', 'b', 'c');把5个从'a'移到'c'
这时n=5, noe='a', two='b', three='c'
因为n!=1, 执行else里的
hanoi( 4, 'a', 'c', 'b'); //把上面4个从a移到b
move( 'a', 'c'); //把第5个从a移到c
hanoi( 4, 'b', 'a', 'c'); //再把那4个从b移到c
上面的很好明白的, 再分析hanoi( 4, 'a', 'c', 'b'); //把上面4个从a移到b,也是执行else
hanoi( 3, 'a', 'b', 'c'); //把上面3个从a移到c
move( 'a', 'b'); //把第4个从a移到b
hanoi( 4, 'c', 'a', 'b'); //再把那3个从c移到b

一直到n=1才结束

热点内容
路由器怎么设置登录密码怎么设置密码 发布:2025-01-10 21:11:12 浏览:893
营运车解压 发布:2025-01-10 21:11:01 浏览:932
安卓是哪里出产 发布:2025-01-10 21:10:23 浏览:953
本科来了安卓版叫什么 发布:2025-01-10 21:08:43 浏览:649
南京c语言 发布:2025-01-10 20:55:08 浏览:466
如何excel设置密码保护 发布:2025-01-10 20:50:07 浏览:994
桌面文件限制存储大小 发布:2025-01-10 20:28:45 浏览:79
安卓车机怎么把应用放界面 发布:2025-01-10 20:28:36 浏览:679
减算法小学 发布:2025-01-10 20:22:41 浏览:799
ig源码网 发布:2025-01-10 20:20:04 浏览:420