一块板上有三根针:A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。要把这64个圆盘从A针移动到C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。
这个是经典的汉诺塔问题了,也是经典的递归问题。每次只能移动一个圆盘,移动可以借助B针进行。我们通过递归,可以现将A中的63个放在B针上,然后将最大的一个也就是第64个放到C上。然后将B针中的63个借助A针,再移动到C针。代码如下:
- #include <stdio.h>
-
void move(int n, char x, char y, char z)
-
{
-
if(n == 1)
-
printf("%c-->%c\n", x, z);
-
else{
-
move(n-1, x, z, y);
-
printf("%c-->%c\n", x, z);
-
move(n-1, y, x, z);
-
}
-
}
-
-
int main(int argc, char * argv[])
-
{
-
int n;
-
printf("input diskes numbers:\n");
-
scanf("%d", &n);
-
printf("the step to moving %d diskes:\n",n);
-
move(n,'A','B','C');
-
-
return 0;
-
}
执行如下:
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
阅读(3168) | 评论(0) | 转发(1) |