软件介绍:什么是汉诺塔汉诺塔(Tower of Hanoi),又称河内塔。源自印度古老传说的一个游戏,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小...
什么是汉诺塔
汉诺塔(Tower of Hanoi),又称河内塔。源自印度古老传说的一个游戏,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
若每次移动需要1s的时间,那么请问婆罗门需要多久才能把这64片黄金圆盘从一根石柱上移动到另一个石柱上?
若只有1个圆盘时,需要移动1次;若有2个圆盘时,需要移动3次;若有3个圆盘时,需要移动7次……不难看出,汉诺塔步数的数学规律为2的n次方减1(n为柱子上的圆盘个数)。所以若有64个圆盘那将会移动2^64-1次(即:18,446,744,073,709,551,615?次),若每次移动需要1s时间,则需要将近5849亿年的时间才能够做到。可见大梵天有多恨婆罗门,这绝对是在坑人啊!!!
如何用C语言实现汉诺塔
现有三个柱子A、B、C,其中有n个圆盘在A柱上,最终要实现把这n个圆盘从A柱借助B柱移动到C柱上。实现实现思路:先将n-1个圆盘从A柱移动到B柱上,然后将A柱上最后一个圆盘移动到C柱上,最后再把B柱上的n-1个圆盘移动到C柱上。如下图所示:
#include<stdio.h>
void main()
void hanoi(int n,char one,char two,char three);
int n;
printf("please input the number of diskes:\n");
scanf("%d",&n);
printf("the steps to moving is:\n");
hanoi(n,'A','B','C');
void hanoi(int n,char one ,char two ,char three)//把猛轮郑n个盘子从 one借助枝颂two移动到there
void move(char a,char b);
if(n==1) move(one,three);
hanoi(n-1,one,three,two);//把n-1个桐埋盘子从 one借助there移动到two
hanoi(n-1,two,one,three);//把n-1个盘子从 two借助one移动到there
printf("%c-->%c\n",a,b);