鱼C论坛

 找回密码
 立即注册
查看: 2778|回复: 14

[技术交流] C语言24点游戏算法分析

[复制链接]
发表于 2020-2-20 22:38:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 juhugufudu 于 2020-2-21 10:03 编辑
        24点游戏算法分析
1.分5种情况(空格中的是{'+','-','*','/'})
    ((A B) C) D
    (A (B C)) D
    A ((B C) D)
    A (B (C D))
    (A B)(C D)
2.变换符号有 3个,所以我们用三重循环来(ps:放到第二重要的函数中)
    for(op1 = 1;op1<=4;op1++){
        for(op2 = 1;op2<=4;op2++){
            for(op3 = 1;op3<=4;op3++){
                1 -> +;
                2 -> -;
                3 -> *;
                4 -> /;
            }
        }
    }
3.关于输入
    输入的是四个整数 -> a,b,c,d
    来一个判断参数 -> runOk(a,b,c,d,op1,op2,op3)
    runOk的作用是 -> (上传参数给子参数,并输出)
    子函数为 -> m1,m2,m3,m4,m5 ->作用是确定一下符号(ps:返回的是24 or !24)
    子函数参数列表为 -> a,b,c,d,op1,op2,op3
4.关于输出
    直接一个printf()输出语句 -> 在runOk的函数里
    Like调用一下m1:
    if(m1(a,b,c,d,op1,op2,op3) == 24)
        printf("((%d%c%d)%c%d)%c%d",a,op[op1],b,op[op2],c,op[op3],d);
5.细节
    子的子函数中,是放回对应的运算结果的(运算加减乘除)
    关键代码如下:
        switch(op){
            case 1:
                return a+b;
            case 2:
                return a-b;
            case 3:
                return a*b;
            case 4:
                return a/b;
        }
    调用就比较麻烦:(其实是最简单的了)
        double f1 = fun(a,b,op1);
        double f2 = fun(f1,c,op2);
        double f3 = fun(f2,d,op3);
6.最后
    代码大概是这样的:
(1)开始
(2)输入四个数字 -> a,b,c,d
(3)如果(get24(a,b,c,d))为真:
    否则 printf("你整的我蒙了...\n")
(4)结束
    get24()
    {
        for 三重循环 -> 1~4 -> op1,op2,op3
        {
            如果(m1(a,b,c,d,op1,op2,op3) == 24){
                打印("((%d%c%d)%c%d)%c%d",a,op[op1],b,op[op2],c,op[op3],d");
                flag = 1
            }
            如果(m2..) flag = 1;
            ...
        }
    }
    if(flag != 1 )return 0;
    else return 1;

    m1 -> ((A B) C) D
    double f1 = fun(a,b,op1);
    double f2 = fun(f1,c,op2);
    double f3 = fun(f2,d,op3);
    return f3;

    m2 -> (A (B C))D
    double f1 = fun(b,c,op2);
    double f2 = fun(f1,a,op1);
    double f3 = fun(f2,d,op3);
    return f3;

    m3 -> A ((B C) D)
    double f1 = fun(b,c,op2);
    double f2 = fun(f1,d,op3);
    double f3 = fun(f2,a,op1);
    return f3;

    m4 = A (B (C D))
    double f1 = fun(c,d,op3);
    double f2 = fun(f1,b,op2);
    double f3 = fun(f2,a,op1);
    return f3;

    m5 -> (A B)(C D)
    double f1 = fun(a,b,op1);
    double f2 = fun(c,d,op3);
    double f3 = fun(f1,f2,op2);
    return f3;
end func.
    double pe(a,b,op){
        switch(op){
                case 1:
                    return a+b;
                case 2:
                    return a-b;
                case 3:
                    return a*b;
                case 4:
                    return a/b;
        }
    }

end.
数据结构:
    1.FILE *fin,*fout;
    2.char fp[5] = {'#','+','-','*','/'};
    3.int a,b,c,d; -> 为了之前code的有效性,最好定义在 main()
    4...........


游客,如果您要查看本帖隐藏内容请回复

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-21 10:18:19 | 显示全部楼层
嗯嗯  学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 21:08:33 From FishC Mobile | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 21:05:02 | 显示全部楼层
谢谢分享。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 12:08:54 | 显示全部楼层
朕想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 14:21:47 | 显示全部楼层
看看代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 12:13:53 | 显示全部楼层
谢谢分享~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-22 11:11:50 | 显示全部楼层

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-6 19:44:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-6 20:54:28 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 10:08:29 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-12 15:14:53 | 显示全部楼层
康康
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-17 21:03:47 | 显示全部楼层
为你点赞。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-17 21:49:08 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-19 22:52:05 | 显示全部楼层
瞄一瞄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 09:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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