juhugufudu 发表于 2020-2-20 22:38:37

C语言24点游戏算法分析

本帖最后由 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,b,op,c,op,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,b,op,c,op,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 = {'#','+','-','*','/'};
    3.int a,b,c,d; -> 为了之前code的有效性,最好定义在 main()
    4...........


**** Hidden Message *****

zxlht 发表于 2020-2-21 10:18:19

嗯嗯学习了

wscainiao 发表于 2020-2-23 21:08:33

感谢分享

quark 发表于 2020-2-25 21:05:02

谢谢分享。。。

baicizhan 发表于 2020-2-26 12:08:54

朕想知道

Jonsen_Brad 发表于 2020-2-26 14:21:47

看看代码。

远宁yu 发表于 2020-3-8 12:13:53

谢谢分享~

ecavs 发表于 2020-5-22 11:11:50


a327904410 发表于 2021-11-6 19:44:15

{:10_256:}

tomok 发表于 2021-11-6 20:54:28

谢谢分享

857142 发表于 2022-2-12 10:08:29

666

mjsdsg 发表于 2022-2-12 15:14:53

康康

quark 发表于 2022-2-17 21:03:47

为你点赞。。。

1molHF 发表于 2022-2-17 21:49:08

感谢分享

ahait1121 发表于 2022-2-19 22:52:05

瞄一瞄
页: [1]
查看完整版本: C语言24点游戏算法分析