汉诺塔c语言
⑴ 汉诺塔c语言
我给你个最经典的解法:
#include<stdio.h>
void main()
{
void hanoi(int n,char one,char two,char three);bsp; &nbs
int m;
printf("input the number of diskes:\n");
scanf("%d",&m);#include<stdio.h&
printf("The step to moveing %d diskes:\n",m);
hanoi(m,'A','B','C');
system("pause");char one,char two,ch
}
void hanoi(int n,char one,char two,char three)
{gt; void main() { &n<br/> void move(char x,char y);<br/> if(n==1)<br/> move(one,three);bsp; &nbs<br/> else<br/> {<br/> hanoi(n-1,one,three,two);p; void hanoi(int n,<br/> move(one,three);<br/> hanoi(n-1,two,one,three);<br/> }bsp; &nbs
}
void move(char x,char y)
{#include<stdio.h&
printf("%c-->%c\n",x,y);
}
⑵ 汉诺塔c语言高手进
你要Pascal的我还能帮帮你,C的我压根不会
⑶ 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语言编汉诺塔
a,b,c就表示三个杆子而已,你写d,e,f也没什么啊,这个就不用纠结了
⑸ 汉诺塔C语言程序
还要动画?那个需要用到图形库的;
你用的是什么开发环境啊
⑹ 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语言编写程序求汉诺塔的移动步骤
#include<stdio.h>
void move(char a,char b)
{
printf("%c->%c\n",a,b);
}
void f(int n,char a,char b,char c)
{
if(n==1) move(a,c);
else
{
f(n-1,a,c,b);
move(a,c);
f(n-1,b,a,c);
}
}
void main()
{
int n;
scanf("%d",&n);
f(n,'a','b','c');
}
这是我的代码 前面的是定义一个函数 这里递归体现在函数里面还有函数 于是会一次又一次的计算 直到最后把N-1以前的都移到B,最下面的移到C,再把其他的从B移到C。。 无返回的话 应该是这里用void 没有return返回数值
⑻ C语言汉诺塔问题
哥们,你还没明白什么叫递归,用tc单步执行一遍看看你就会明白了,这里说太麻烦。