大神求助
汉诺塔问题是这样的:有3根柱子A,B,C,其中A柱上有64个盘子,盘子大小不等,大的在下,小的在上。要求把这64个盘子从A柱移到C柱上,在移动过程中可以借助B柱,每次只允许移动一个盘子,且在移动过程中在三根柱子上都保持大盘在下,小盘在上。从键盘输入一个整数n(n<=64)表示盘子的个数,打印出移动盘子的正确步骤。输入要求
从键盘输入盘子的个数n。
输出要求
打印出n个盘子的移动步骤。每一步骤占据一行。
输入样例
3
输出样例
a->c
a->b
c->b
a->c
b->a
b->c
a->c #include <stdio.h>
void hannuo(char a, char b, char c, size_t n) {
if(!n) return;
hannuo(a, c, b, n - 1);
printf("%c -> %c\n", a, c);
hannuo(b, a, c, n - 1);
}
int main(void) {
size_t n;
scanf("%lu", &n);
hannuo('a', 'b', 'c', n);
return 0;
}
int moveto(char a,char b,char c,int n)
{
if(1==n)
{
printf("%c->%c\n",a,c);
return 0;
}
moveto(a,c,b,n-1);
printf("%c->%c\n",a,c);
moveto(b,a,c,n-1);
return 0;
}
int main()
{
int n=0;
scanf("%d".&n);
if(n>0)moveto('A','B','C',n);
return 0;
} 本帖最后由 小亦003 于 2021-12-23 19:23 编辑
#include <stdio.h>
int main(void)
{
void hanoi(char a, char b, char c, int n); /*函数声明*/
int n;
printf("输入样例:\n");
scanf("%d", &n);
printf("输出样例:\n");
hanoi('a','b','c', n);
return 0;
}
void hanoi(char a, char b, char c, int n)
{
if(n > 1)
{
hanoi(a, c, b, n-1);/*第一步*/
printf("%c -> %c\n", a, c);/*第二步*/
hanoi(b, a, c, n-1);/*第三步*/
}
else if (n == 1)/*问题规模降低到1时*/
{
printf("%c -> %c\n", a, c);
}
}
运行结果:
输入样例:
3
输出样例:
a -> c
a -> b
c -> b
a -> c
b -> a
b -> c
a -> c
页:
[1]