|
发表于 2017-10-23 23:52:39
|
显示全部楼层
- #include <stdio.h>
- void main()
- {
- void hannuota(int fangxiang ,int n);
- int n;
- scanf("%d",&n);
- hannuota(1,n);
- printf("\n");
- }
- void hannuota(int fangxiang,int n)
- /*
- fangxiang=1 表示移动方向为从A移到C
- fangxiang=2 表示移动方向为从A移到B
- fangxiang=3 表示移动方向为从B移到C
- fangxiang=4 表示移动方向为从C移到B
- fangxiang=5 表示移动方向为从B移到A
- fangxiang=6 表示移动方向为从C移到A
- hannuota(int fangxiang,int n)表示按照规定方向移动n个盘子
- */
- {
-
- if(n==1)
- {
- switch(fangxiang)
- {
- case 1:
- printf("%3d:A->C",1); //表示把1号盘子从A移动到C
- break;
- case 2:
- printf("%3d:A->B",1); //表示把1号盘子从A移动到B
- break;
- case 3:
- printf("%3d:B->C",1); //表示把1号盘子从B移动到C
- break;
- case 4:
- printf("%3d:C->B",1); //表示把1号盘子从C移动到B
- break;
- case 5:
- printf("%3d:B->A",1); //表示把1号盘子从B移动到A
- break;
- case 6:
- printf("%3d:C->A",1); //表示把1号盘子从C移动到A
- }
- }
- else
- {
- switch(fangxiang)
- {
- case 1:
- hannuota(2,n-1);
- printf("%3d:A->C",n); //表示把n号盘子从A移动到C
- hannuota(3,n-1);
- break;
- case 2:
- hannuota(1,n-1);
- printf("%3d:A->B",n); //表示把n号盘子从A移动到B
- hannuota(4,n-1);
- break;
- case 3:
- hannuota(5,n-1);
- printf("%3d:B->C",n); //表示把n号盘子从B移动到C
- hannuota(1,n-1);
- break;
- case 4:
- hannuota(6,n-1);
- printf("%3d:C->B",n); //表示把n号盘子从C移动到B
- hannuota(2,n-1);
- break;
- case 5:
- hannuota(3,n-1);
- printf("%3d:B->A",n); //表示把n号盘子从B移动到A
- hannuota(6,n-1);
- break;
- case 6:
- hannuota(4,n-1);
- printf("%3d:C->A",n); //表示把n号盘子从C移动到A
- hannuota(5,n-1);
- }
- }
- }
复制代码 |
|