C语言实现扑克牌计算24点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C 语⾔实现扑克牌计算24点
⼀副扑克牌的每张牌表⽰⼀个数(J 、Q 、K 分别表⽰11、12、13,两个司令都表⽰6)。任取4张牌,即得到4个1~13的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为⼀个运算式。每个数只能参与⼀次运算,4个数顺序可以任意组合,4个运算符任意取3个且可以重复取。运算遵从⼀定优先级别,可加括号控制,最终使运算结果为24。请输出⼀种解决⽅案的表达式,⽤括号表⽰运算优先。如果没有⼀种解决⽅案,则输出-1表⽰⽆解。
输⼊在⼀⾏中给出4个整数,每个整数取值在[1, 13]。
输出⼀种解决⽅案的表达式,⽤括号表⽰运算优先。如果没有解决⽅案,请输出-1
。
四个操作数,三个操作符,两个括号,有以下五种计算模式
((A op B) op C) op D
(A op (B op C)) op D
A op (
B op (
C op D))
A op ((
B op C) op D)
(A op B) op (C op D)
将每⼀种模式写成函数,最后采⽤穷举法找到计算结果为24的算式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//注意要在输出结果后⾯加\n ,不然会有格式错误,坑爹啊#include "stdio.h"#include "stdlib.h" char op[5]={'#','+','-','*','/',}; float cal(float x,float y,int op){ switch(op) {
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 case1:return x+y;
case2:return x-y;
case3: return x*y;
case4: return x/y;
}
}
float calculate_model1(float i,float j,float k,float t,int op1,int op2,int op3)
{
float r1,r2,r3;
r1 = cal(i,j,op1);
r2 = cal(r1,k,op2);
r3 = cal(r2,t,op3);
return r3;
}
float calculate_model2(float i,float j,float k,float t,int op1,int op2,int op3)
{
float r1,r2,r3;
r1 = cal(j,k,op2);
r2 = cal(i,r1,op1);
r3 = cal(r2,t,op3);
return r3;
}
float calculate_model3(float i,float j,float k,float t,int op1,int op2,int op3)
{
float r1,r2,r3 ;
r1 = cal(k,t,op3);
r2 = cal(j,r1,op2);
r3 = cal(i,r2,op1);
return r3;
}
float calculate_model4(float i,float j,float k,float t,int op1,int op2,int op3)
{
float r1,r2,r3;
r1 = cal(j,k,op2);
r2 = cal(r1,t,op3);
r3 = cal(i,r2,op1);
return r3;
}
float calculate_model5(float i,float j,float k,float t,int op1,int op2,int op3)
{
float r1,r2,r3 ;
r1 = cal(i,j,op1);
r2 = cal(k,t,op3);
r3 = cal(r1,r2,op2);
return r3;
}
int get24(int i,int j,int k,int t)
{
int op1,op2,op3;
int flag=0;
for(op1=1;op1<=4;op1++)
for(op2=1;op2<=4;op2++)
for(op3=1;op3<=4;op3++)
{
if(calculate_model1(i,j,k,t,op1,op2,op3)==24){
printf("((%d%c%d)%c%d)%c%d\n",i,op[op1],j,op[op2],k,op[op3],t);flag = 1;goto OUT; }
if(calculate_model2(i,j,k,t,op1,op2,op3)==24){
printf("(%d%c(%d%c%d))%c%d\n",i,op[op1],j,op[op2],k,op[op3],t);flag = 1;goto OUT; }
if(calculate_model3(i,j,k,t,op1,op2,op3)==24){
printf("%d%c(%d%c(%d%c%d))\n",i,op[op1],j,op[op2],k,op[op3],t);flag = 1;goto OUT;