鱼C论坛

 找回密码
 立即注册
查看: 1737|回复: 6

[已解决]c语言初学之-汉诺塔

[复制链接]
发表于 2018-7-29 16:07:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 海绵爱上星 于 2018-7-29 16:14 编辑

#include <stdio.h>
#include <math.h>

void main()
{
        int n;
    char A,B,C;
    void hannota(int n,char,char,char);
   
    printf("请输入汉诺塔的层数n:\n");
    scanf("%d",&n);
    hannota(n,'a','b','c');


}

void hannota(n,A,B,C)
{
    void move(char,char);
    if (1 == n)
    {
        move(A,C);
    }



    else
    {
        hannota(n-1,A,C,B);
        move(A,C);
        hannota(n-1,B,A,C);
    }

}

void move(char x,char y)
{
   
    printf("%c --> %c\n",x,y);
}





为什么我的代码跑出来相对小甲鱼的多了前面4行;
跑出来如下:

最佳答案
2018-7-29 16:49:23
本帖最后由 claws0n 于 2018-7-29 16:51 编辑

您输入的 n 是多少?貌似 5

您的代码有小问题且不可阅读,请适当用空格
不需要 #include <math.h>
函数的声明放在 main() 之前,不要放在 main() 内部或函数内部
稍微整理您的代码
#include <stdio.h>

void hannota(int, char, char, char);
void move(char, char);

void main()
{
    int n;
    char A,B,C;
   
    printf("请输入汉诺塔的层数n:\n");
    scanf("%d", &n);
    hannota(n,'a','b','c');
    
}

void hannota(int n, char A, char B, char C)
{

    if (1 == n)
    {
        move(A, C);
    }

    else 
    {
        hannota(n - 1, A, C, B);
        move(A, C);
        hannota(n - 1, B, A, C);
    }

}

void move(char x,char y)
{
    
    printf("%c --> %c\n", x, y);
}
c.1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-7-29 16:10:50 | 显示全部楼层
新手求助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-29 16:49:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 claws0n 于 2018-7-29 16:51 编辑

您输入的 n 是多少?貌似 5

您的代码有小问题且不可阅读,请适当用空格
不需要 #include <math.h>
函数的声明放在 main() 之前,不要放在 main() 内部或函数内部
稍微整理您的代码
#include <stdio.h>

void hannota(int, char, char, char);
void move(char, char);

void main()
{
    int n;
    char A,B,C;
   
    printf("请输入汉诺塔的层数n:\n");
    scanf("%d", &n);
    hannota(n,'a','b','c');
    
}

void hannota(int n, char A, char B, char C)
{

    if (1 == n)
    {
        move(A, C);
    }

    else 
    {
        hannota(n - 1, A, C, B);
        move(A, C);
        hannota(n - 1, B, A, C);
    }

}

void move(char x,char y)
{
    
    printf("%c --> %c\n", x, y);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-29 16:54:38 | 显示全部楼层
没错呀,帮你整理了下代码。
#include <stdio.h>

void hannota(int, char, char, char);
void move(char, char);

int main()
{
        int n;
        char A, B, C;

        printf("请输入汉诺塔的层数n:\n");
        scanf("%d", &n);
        hannota(n, 'x', 'y', 'z');

        return 0;
}

void hannota(int n, char A, char B, char C)
{
        if (1 == n)
        {
                move(A, C);
        }
        else
        {
                hannota(n - 1, A, C, B);
                move(A, C);
                hannota(n - 1, B, A, C);
        }

}

void move(char x, char y)
{
        printf("%c --> %c\n", x, y);
}

输出和python上的完全一样,有什么错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-29 17:44:58 | 显示全部楼层
claws0n 发表于 2018-7-29 16:49
您输入的 n 是多少?貌似 5

您的代码有小问题且不可阅读,请适当用空格

打印出来不会多4行吗。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-29 17:49:08 | 显示全部楼层
无符号整形 发表于 2018-7-29 16:54
没错呀,帮你整理了下代码。

一开始不是应该是x--->z,,但是跑出来是z--->y
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-29 18:03:58 | 显示全部楼层
海绵爱上星 发表于 2018-7-29 17:49
一开始不是应该是x--->z,,但是跑出来是z--->y

我这里一切正常,你可能没有看全,拉动一下滚动条试一试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-2 06:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表