c语言汉诺Hanoi塔

c语言汉诺Hanoi塔

首页休闲益智Tower of Hanoi 汉诺塔更新时间:2024-07-16

题目要求:

一块板上有三根针,A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。如下图所示。要把这64个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。

这是一道非常经典的数学题和程序算法题,上学期间老师讲解数学归纳法,通过等比数列可行运行次数的规律是-1。若我们用编程的方式去解决汉诺塔,采用递归算法完成,并且记录执行的顺序,请看如下代码。

Hanoi塔示意图

#include <stdio.h> #include <math.h> static unsigned long number=0;//搬运次数 move(int n,char x,char y,char z) { if(n==1) { number ; printf("%c-->%c\n",x,z); } else { move(n-1,x,z,y); // A C B printf("%c-->%c\n",x,z); move(n-1,y,x,z); // B A C number ; } } int main(void) { int n; unsigned long sum; printf("input diskes number:\n"); scanf("%d",&n); /*输入盘子数目n*/ printf("The step to moving %d diskes:\n",n); move(n,'A','B','C'); /*递归调用move(),求解盘子的搬运过程*/ printf("Handling times=%d\r\n",number);//搬移次数 //printf("n=%d\n",n); sum=pow(2,n)-1; printf("Handling times=%d\r\n",sum);//搬移次数 getche(); return 0; }

运行结果:

运行结果

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved