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 *****
嗯嗯学习了
感谢分享 谢谢分享。。。 朕想知道 看看代码。 谢谢分享~ 。
{:10_256:} 谢谢分享
666 康康 为你点赞。。。 感谢分享 瞄一瞄
页:
[1]