汉诺塔问题:
若n==1,直接将n从A移到C;
若n==2,现将第1块从A移到B,再将第二块移到C,再将1移到C;
第n块,1:将第n-1从A借助C移到B,
2:将第n块移到C,
3:再将第n-1从B借助A移到C;
于是: 总的步数f(n) = 2*f(n-1)+1;
若n==2,现将第1块从A移到B,再将第二块移到C,再将1移到C;
第n块,1:将第n-1从A借助C移到B,
2:将第n块移到C,
3:再将第n-1从B借助A移到C;
于是: 总的步数f(n) = 2*f(n-1)+1;
#include <stdio.h>
void move(int n,char a,char b,char c)
{
if(n==1)
{
printf("Move disk %d from %c to %c\n",n,a,c);
}
else
{
move(n-1,a,c,b); //把最大盘子之外的盘子从A移动到B;
printf("Move disk %d from %c to %c\n",n,a,c); //把最大盘子从A移动到C;
move(n-1,b,a,c); //把最大盘子之外的盘子从B移动到C;
}
}
int main()
{
int n;
scanf("%d",&n);
move(n,'A','B','C');
return 0;
}
void move(int n,char a,char b,char c)
{
if(n==1)
{
printf("Move disk %d from %c to %c\n",n,a,c);
}
else
{
move(n-1,a,c,b); //把最大盘子之外的盘子从A移动到B;
printf("Move disk %d from %c to %c\n",n,a,c); //把最大盘子从A移动到C;
move(n-1,b,a,c); //把最大盘子之外的盘子从B移动到C;
}
}
int main()
{
int n;
scanf("%d",&n);
move(n,'A','B','C');
return 0;
}
778

被折叠的 条评论
为什么被折叠?



