7-7 用扑克牌计算24点 (25 分)

一副扑克牌的每张牌表示一个数(J、Q、K 分别表示 11、12、13,两个司令都表示 6)。任取4 张牌,即得到 4 个 1~13 的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式。每个数只能参与一次运算,4 个数顺序可以任意组合,4 个运算符任意取 3 个且可以重复取。运算遵从一定优先级别,可加括号控制,最终使运算结果为 24。请输出一种解决方案的表达式,用括号表示运算优先。如果没有一种解决方案,则输出 -1 表示无解。

输入格式:
输入在一行中给出 4 个整数,每个整数取值在 [1, 13]。

输出格式:
输出任一种解决方案的表达式,用括号表示运算优先。如果没有解决方案,请输出 -1。

输入样例:
2 3 12 12
输出样例:
((3-2)*12)+12

#include<stdio.h>
#define N 4//下面这个函数用于分配不同的四种符号
static int result(int arr[],char op[]);//根据不同的优先级不同的符号计算结果的函数
static double Result(double x, double y, int op);//下面这五个函数是分配不同的优先级
//((A op B) op C) op D
static double result1(double num1,double num2,double num3,double num4,int op1,int op2,int op3);
//(A op (B op C)) op D
static double result2(double num1,double num2,double num3,double num4,int op1,int op2,int op3);
//A op (B op (C op D))
static double result3(double num1,double num2,double num3,double num4,int op1,int op2,int op3);
//A op ((B op C) op D)
static double result4(double num1,double num2,double num3,double num4,int op1,int op2,int op3);
//(A op B) op (C op D)
static double result5(double num1,double num2,double num3,double num4,int op1,int op2,int op3);int main()
{           int num[N],i,j,k,t;char op[5] ={'睿','+','-','*','/'};   //把四种运算符都存入数组中for(i=0;i<N;i++)    //随意输入四个数scanf("%d",&num[i]);//将4个数字组合成各个位上互不相同的数for(i=0;i<N ;i++){for(j=0;j<N;j++){if(i==j) continue;for(k=0;k<N;k++){if(i==k || j==k) continue;for(t=0;t<N;t++){ if(i==t || j==t || k==t) continue;int zuhe_num[N] = {num[i],num[j],num[k],num[t]};    /*  排列四种数字出现的不同顺序,因为有了运算符的不同,所以计算的结果自然是不同的    */int swap =   result(zuhe_num,op);    //得到值是是否已经有一组数据成立了 24的结果,有就直接结束if(swap)//若已有解,则直接结束程序{return 0;}}}}   }//无解printf("-1");
}
static int result(int zuhe_num[],char op[]) //下面这个函数用于分配不同的四种符号
{double sum =0;//穷举所有运算组合for(int i=1;i<=N;i++){for(int j=1;j<=N;j++){for(int k=1;k<=N;k++){sum = result1(zuhe_num[0],zuhe_num[1],zuhe_num[2],zuhe_num[3],i,j,k);if(sum==24)        //如果条件满足直接输出,并返回1结束程序,依次类推下面的一样{//((A op B) op C) op Dprintf("((%d%c%d)%c%d)%c%d\n",zuhe_num[0],op[i],zuhe_num[1],op[j],zuhe_num[2],op[k],zuhe_num[3]);return 1;}sum = result2(zuhe_num[0],zuhe_num[1],zuhe_num[2],zuhe_num[3],i,j,k);if(sum==24){//(A op (B op C)) op Dprintf("(%d%c(%d%c%d))%c%d\n",zuhe_num[0],op[i],zuhe_num[1],op[j],zuhe_num[2],op[k],zuhe_num[3]);return 1;}sum = result3(zuhe_num[0],zuhe_num[1],zuhe_num[2],zuhe_num[3],i,j,k);if(sum==24){//A op (B op (C op D))printf("%d%c(%d%c(%d%c%d))\n",zuhe_num[0],op[i],zuhe_num[1],op[j],zuhe_num[2],op[k],zuhe_num[3]);return 1;}sum = result4(zuhe_num[0],zuhe_num[1],zuhe_num[2],zuhe_num[3],i,j,k);if(sum==24){//A op ((B op C) op D)printf("%d%c((%d%c%d)%c%d)\n",zuhe_num[0],op[i],zuhe_num[1],op[j],zuhe_num[2],op[k],zuhe_num[3]);return 1;}sum = result5(zuhe_num[0],zuhe_num[1],zuhe_num[2],zuhe_num[3],i,j,k);if(sum==24){//(A op B) op (C op D)printf("(%d%c%d)%c(%d%c%d)\n",zuhe_num[0],op[i],zuhe_num[1],op[j],zuhe_num[2],op[k],zuhe_num[3]);return 1;}               }}}//如果没有解决方案return 0;
}
static double Result(double num1, double num2, int op)      //根据不同的优先级不同的符号计算结果的函数
{if(op==1)        //根据传过来的符号进行判断,并执行相应的计算return num1+num2;else if(op==2)return num1-num2;else if(op==3)return num1*num2;else if(op==4)return num1/num2;elsereturn 0;
}
//下面这五个函数是分配不同的优先级
static double result1(double num1,double num2,double num3,double num4,int op1,int op2,int op3)
{                                                       //((A op B) op C) op Ddouble r1,r2,r3;r1 = Result(num1,num2,op1);r2 = Result(r1,num3,op2);r3 = Result(r2,num4,op3);return r3;
}
static double result2(double num1,double num2,double num3,double num4,int op1,int op2,int op3)
{                                                       //(A op (B op C)) op Ddouble r1,r2,r3;r1 = Result(num2,num3,op2);r2 = Result(num1,r1,op1);r3 = Result(r2,num4,op3);return r3;
}
static double result3(double num1,double num2,double num3,double num4,int op1,int op2,int op3)
{                                                       //A op (B op (C op D))double r1,r2,r3;r1 = Result(num3,num4,op3);r2 = Result(num2,r1,op2);r3 = Result(num1,r2,op1);return r3;
}
static double result4(double num1,double num2,double num3,double num4,int op1,int op2,int op3)
{                                                       //A op ((B op C) op D)double r1,r2,r3;r1 = Result(num2,num3,op2);r2 = Result(r1,num4,op3);r3 = Result(num1,r2,op1);return r3;
}static double result5(double num1,double num2,double num3,double num4,int op1,int op2,int op3)
{                                                       //(A op B) op (C op D)double r1,r2,r3;r1 = Result(num1,num2,op1);r2 = Result(num3,num4,op3);r3 = Result(r1,r2,op2);return r3;
}

7-7 用扑克牌计算24点 (25 分)相关推荐

  1. PTA 用扑克牌计算24点 (25 分)

    一副扑克牌的每张牌表示一个数(J.Q.K 分别表示 11.12.13,两个司令都表示 6).任取4 张牌,即得到 4 个 1~13 的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个 ...

  2. 用扑克牌计算24点(c语言)

    用扑克牌计算24点 题目 答案 注意 参考 题目 答案 #include<stdio.h>float operation(float a,float b,char c) {switch(c ...

  3. c语言算24点答案,C语言-纸牌计算24点小游戏

    C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...

  4. Java黑皮书课后题第10章:*10.20(近似e)编程练习题5.26使用下面数列近似计算e(略),为了得到更好的精度,在计算中使用25位精度的BigDecimal

    10.20(近似e)编程练习题5.26使用下面数列近似计算e(略),为了得到更好的精度,在计算中使用25位精度的BigDecimal 题目 首次尝试 代码 运行 关于揪bug 第二次尝试 代码 运行结 ...

  5. c#和javascript分别轻松实现计算24点

    24点游戏介绍:给出4个1-9之间的整数(ms我当年玩的时候是用扑克牌),其中每个数字必须且只用一次:任意使用+-*/ ( ),构造出一个表达式,使得最终结果为24,这就是常见的算24点的游戏(我的老 ...

  6. 1224 红魔馆的纸牌游戏 (计算24点,dfs)

    Description 红魔馆的蕾米莉亚大小姐一天发现人类有一种叫做24点的游戏,于是就带着一副不知哪里弄来的扑克牌到图书馆找帕秋莉玩 24点游戏的规则:从一副牌中随机抽取4张牌,牌的点数为1到13之 ...

  7. 使用Scala语言开发GUI界面的计算24点的游戏应用

    今年开始学习Scala语言,对它的强大和精妙叹为观止,同时也深深感到,要熟练掌握这门语言,还必须克服很多艰难险阻. 这时,我就在想,如果能有一种方式,通过实际的应用实例,以寓教于乐的方式,引导我们逐步 ...

  8. 计算24点游戏精化算法剖析

    很多人都玩过这个数学味儿很浓的益智游戏:抽出4张扑克牌,牌上的点数代表四个数字,花牌视为1点(有的把J.Q.K分别视为11.12.13点),玩家中谁最先运用加减乘除四则运算,由这四个数计算出24,谁就 ...

  9. 【JavaScript】计算24点

    华为算法题1: /**  * 计算24点是一种扑克牌益智游戏,随机抽出4张扑克牌,通过加(+),减(-),乘(*), 除(/)四种运算法则计算得到整数24,本问题中,扑克牌通过如下字符或者字符串表示, ...

  10. C语言-纸牌计算24点小游戏

    C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...

最新文章

  1. 讲解知识图谱成体系文章 (魔图互联知识图谱写的质量比较高的)
  2. Caffe CNN特征可视化
  3. 博途项目服务器,博图服务器客户端架构
  4. 计算机网络安全反思,网络安全教育教学反思范文
  5. jQuery插件 -- Cookie插件
  6. mysql备份一个表到ftp_备份部分mysql表并上传至指定ftp服务器目录中
  7. 蓝桥 算法训练 P0505
  8. python矩阵旋转函数_Python3算法之十:矩阵旋转
  9. git分支(branch)操作相关命令
  10. easypoi导出excel 效率_Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率...
  11. 在 Nginx 上支持 HTTP/3
  12. 构建虚拟工控环境系列 - 罗克韦尔虚拟PLC
  13. django 1.8 官方文档翻译: 6-6-1 部署 Django
  14. traceroute显示*号_traceroute 的名词解释
  15. 去中心化交易所如何“惊世骇俗”?
  16. java 参数值_java参数传值方式
  17. 自己写段代码批量修改照片的Exif数据
  18. Java 拾遗补阙 ----- 深入了解父类引用指向子类对象
  19. 还不了解外贸流程?这一篇就够了(小声bb)
  20. 我想要申请一个ICP经营许可证,哪个平台能办理呢?

热门文章

  1. BZOJ4241历史研究题解
  2. swift4.0闭包
  3. Ajax与jQuery、json
  4. Android ListView显示底部的分割线
  5. 无错版Vsftpd Mysql Pam设置虚拟用户要领
  6. OLE 操作Excel 祥解
  7. CNN图像处理常用损失函数对比评测
  8. 我大意了,刚一放出来就上了牛客网头条了
  9. poj2299(Ultra-QuickSort)树状数组+离散化
  10. 02 ZooKeeper分布式集群安装