c新手吧 关注:8,601贴子:48,093
  • 0回复贴,共1

C语言普通汉诺塔每步的移动方案问题

只看楼主收藏回复

输出第num步移动第几个盘子,由第几根柱子移到
(普通汉诺塔)最多只能是3个盘子,4个就不行了
#include<stdio.h>
#include<math.h>
int num=1;
void move(int n,char x,char y)//移动的是第n个盘子
{
printf("NO.%d:the %2dth disc :%c->%c \n",num,n,x,y); //第num步,移动的是第n个盘子,由X->Y
}
void hanoi(int n,long long m,char a,char b,char c)
{if(m<(int)(pow(2,n-1)+0.5))
hanoi(n-1,m,a,c,b);
if(m==(int)(pow(2,n-1)+0.5))
move(n,a,c);
if(m>(int)(pow(2,n-1)+0.5))
hanoi(n-1,m,b,a,c);
}
int main()
{int n;
long long m;
printf("how many discs:\n");
scanf("%d",&n);
printf("input step:\n");
scanf("%I64d",&m);
printf("step%I64d :\n",m);
hanoi(n,m,'a','b','c');
return 0;
}


1楼2014-03-26 00:32回复