Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2539609
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-05-24 11:34:55

    一块板上有三根针:A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。要把这64个圆盘从A针移动到C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。
    这个是经典的汉诺塔问题了,也是经典的递归问题。每次只能移动一个圆盘,移动可以借助B针进行。我们通过递归,可以现将A中的63个放在B针上,然后将最大的一个也就是第64个放到C上。然后将B针中的63个借助A针,再移动到C针。代码如下:
  1. #include <stdio.h>
  2. void move(int n, char x, char y, char z)
  3. {
  4.   if(n == 1)
  5.     printf("%c-->%c\n", x, z);
  6.   else{
  7.     move(n-1, x, z, y);
  8.     printf("%c-->%c\n", x, z);
  9.     move(n-1, y, x, z);
  10.   }
  11. }

  12. int main(int argc, char * argv[])
  13. {
  14.   int n;
  15.   printf("input diskes numbers:\n");
  16.   scanf("%d", &n);
  17.   printf("the step to moving %d diskes:\n",n);
  18.   move(n,'A','B','C');
  19.   
  20.   return 0;
  21. }
执行如下:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ gcc -Wall 6.15.c
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out 
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out 
input diskes numbers:
3
the step to moving 3 diskes:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C

阅读(3182) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~