[C] 汉诺塔 →→→→→进入此内容的聊天室

来自 , 2020-12-16, 写在 C, 查看 129 次.
URL http://www.code666.cn/view/c182f930
  1. #include<stdio.h>
  2.  
  3. /*解法如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递回处理。事实上,若有n个盘子,则移动完毕所需之次数
  4. 为2^n-1,所以当盘数为64时,则 64所需次数为:2 -1=8446744073709551615为5.05390248594782e+16年,也就是约5000世纪,如果对这数字没什幺概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左右*/
  5. void hanoi ( int n,char A,char B,char C )
  6. {
  7.         if ( n==1 )
  8.         {
  9.                 printf ( "Movesheet%dfrom%cto%c\n",n,A,C );
  10.         }
  11.         else
  12.         {
  13.                 hanoi ( n-1,A,C,B );
  14.                 printf ( "Movesheet%dfrom%cto%c\n",n,A,C );
  15.                 hanoi ( n-1,B,A,C );
  16.         }
  17. }
  18.  
  19. int main()
  20. {
  21.         int n;
  22.         printf ( "请输入盘数:" );
  23.         scanf ( "%d",&n );
  24.         hanoi ( n,'A','B','C' );
  25.         return 0;
  26. }

回复 "汉诺塔"

这儿你可以回复上面这条便签

captcha