大白兔奶糖12138 发表于 2021-12-23 18:44:02

大神求助

汉诺塔问题是这样的:有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

人造人 发表于 2021-12-23 18:59:38

#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;
}

jhq999 发表于 2021-12-23 19:11:49

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:20:59

本帖最后由 小亦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]
查看完整版本: 大神求助