• 一副扑克牌的每张牌表示一个数(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
结尾无空行

WA:

#include <bits/stdc++.h>
using namespace std;char op[4] = {'+', '-', '*', '/'};
float res(float x,float y,char op)
{if(op == '+'){return x + y;}if(op == '-'){return x - y;}if(op == '*'){return x * y;}if(op == '/'){return x / y;}return 0;
}float module1(float s1,float s2,float s3,float s4,char op1,char op2,char op3)
{float x, y, z;x = res(s1, s2, op1);y = res(x, s3, op2);z = res(y, s4, op3);return z;
}float module2(float s1,float s2,float s3,float s4,char op1,char op2,char op3)
{float x, y, z;x = res(s1, s2, op1);y = res(s3, s4, op3);z = res(x, y, op2);return z;
}float module3(float s1,float s2,float s3,float s4,char op1,char op2,char op3)
{float x, y, z;x = res(s2, s3, op2);y = res(s1, x, op1);z = res(y, s4, op3);return z;
}float module4(float s1,float s2,float s3,float s4,char op1,char op2,char op3)
{float x, y, z;x = res(s2, s3, op2);y = res(x, s4, op3);z = res(s1, y, op1);return z;
}float module5(float s1,float s2,float s3,float s4,char op1,char op2,char op3)
{float x, y, z;x = res(s3, s4, op3);y = res(s2, x, op2);z = res(s1, y, op1);return z;
}int solve(int a,int b,int c,int d)
{int i, j, k;int flag = 0;for (i = 0; i < 4;i++){for (j = 0; j < 4;j++){for (k = 0; k < 4;k++){char op1 = op[i];char op2 = op[j];char op3 = op[k];if(module1(a,b,c,d,op1,op2,op3) == 24){printf("((%d%c%d)%c%d)%c%d\n", a, op1, b, op2, c, op3, d);flag = 1;break;}if(module2(a,b,c,d,op1,op2,op3) == 24){printf("(%d%c%d)%c(%d%c%d)\n", a, op1, b, op2, c, op3, d);flag = 1;break;}if(module3(a,b,c,d,op1,op2,op3) == 24){printf("(%d%c(%d%c%d))%c%d\n", a, op1, b, op2, c, op3, d);flag = 1;break;}if(module4(a,b,c,d,op1,op2,op3) == 24){printf("%d%c((%d%c%d)%c%d)\n", a, op1, b, op2, c, op3, d);flag = 1;break;}if(module5(a,b,c,d,op1,op2,op3) == 24){printf("%d%c(%d%c(%d%c%d))\n", a, op1, b, op2, c, op3, d);flag = 1;break;}}}}if(!flag){cout << -1 << endl;return 1;}return 0;
}int main()
{int a, b, c, d;cin >> a >> b >> c >> d;solve(a, b, c, d);return 0;
}

  • 出错的原因很简单,直接主观地固定了题目给出的顺序!

AC:

#include <bits/stdc++.h>
using namespace std;char op[4] = {'+', '-', '*', '/'};
float res(float x, float y, char op)
{if (op == '+')return x + y;if (op == '-')return x - y;if (op == '*')return x * y;if (op == '/')return x / y;
}float module1(float a, float b, float c, float d, char op1, char op2, char op3)
{float x, y, z;x = res(a, b, op1);y = res(x, c, op2);z = res(y, d, op3);return z;
}float module2(float a, float b, float c, float d, char op1, char op2, char op3)
{float x, y, z;x = res(b, c, op2);y = res(a, x, op1);z = res(y, d, op3);return z;
}float module3(float a, float b, float c, float d, char op1, char op2, char op3)
{float x, y, z;x = res(c, d, op3);y = res(b, x, op2);z = res(a, y, op1);return z;
}float module4(float a, float b, float c, float d, char op1, char op2, char op3)
{float x, y, z;x = res(b, c, op2);y = res(x, d, op3);z = res(a, y, op1);return z;
}float module5(float a, float b, float c, float d, char op1, char op2, char op3)
{float x, y, z;x = res(a, b, op1);y = res(c, d, op3);z = res(x, y, op2);return z;
}int solve(int a, int b, int c, int d)
{int i, j, k;int flag = 0;for (i = 0; i < 4; i++){for (j = 0; j < 4; j++){for (k = 0; k < 4; k++){char op1 = op[i], op2 = op[j], op3 = op[k];if (module1(a, b, c, d, op1, op2, op3) == 24){printf("((%d%c%d)%c%d)%c%d", a, op1, b, op2, c, op3, d);flag = 1;break;}if (module2(a, b, c, d, op1, op2, op3) == 24){printf("(%d%c(%d%c%d))%c%d", a, op1, b, op2, c, op3, d);flag = 1;break;}if (module3(a, b, c, d, op1, op2, op3) == 24){printf("%d%c(%d%c(%d%c%d))", a, op1, b, op2, c, op3, d);flag = 1;break;}if (module4(a, b, c, d, op1, op2, op3) == 24){printf("%d%c((%d%c%d)%c%d)", a, op1, b, op2, c, op3, d);flag = 1;break;}if (module5(a, b, c, d, op1, op2, op3) == 24){printf("(%d%c%d)%c(%d%c%d)", a, op1, b, op2, c, op3, d);flag = 1;break;}}if (flag)break;}if (flag)break;}if (flag)return 1;return 0;
}int main()
{int x[4];scanf("%d %d %d %d", &x[0], &x[1], &x[2], &x[3]);int i, j, k, t;int a, b, c, d;int flag = 0;for (i = 0; i < 4; i++){for (j = 0; j < 4; j++){if (j == i)continue;for (k = 0; k < 4; k++){if (k == i || k == j)continue;for (t = 0; t < 4; t++){if (t == i || t == j || t == k)continue;int a = x[i];int b = x[j];int c = x[k];int d = x[t];flag = solve(a, b, c, d);if (flag)break;}if (flag)break;}if (flag)break;}if (flag)break;}if (!flag)cout << -1 << endl;return 0;
}

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

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

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

  2. PTA 多项式A除以B (25 分)

    7-10 多项式A除以B (25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给出一 ...

  3. C++学习之路 | PTA乙级—— 1075 链表元素分类 (25 分)(精简)

    1075 链表元素分类 (25 分) 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元 ...

  4. C++学习之路 | PTA乙级—— 1035 插入与归并 (25 分)(精简)

    1035 插入与归并 (25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直 ...

  5. C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)

    1010 一元多项式求导 (25分) 设计函数求一元多项式的导数.(注:x ​n ​​ (n为整数)的一阶导数为nx ​n−1 ​​ .) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值 ...

  6. PTA 7-14 电话聊天狂人(25 分)map的应用

    7-14 电话聊天狂人(25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10​5​​),为通话记录条数.随后N行,每行给出一条通话记录.简单 ...

  7. 【PTA】哈利·波特的考试 (25 分)

    //事实上是多源最短路问题 //版本1:只需要映射0-N-1,不需要舍掉开头的元素空间 //且不需要特意用变量检测是否每行都无效,正常退出循环即可 #include <iostream> ...

  8. 【PTA】7-2 单链表基本操作 (25 分)

    请编写程序实现单链表插入.删除结点等基本算法.给定一个单链表和一系列插入.删除结点的操作序列,输出实施上述操作后的链表.单链表数据域值为整数. 输入格式: 输入第1行为1个正整数n,表示当前单链表长度 ...

  9. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

最新文章

  1. LeetCode简单题之检查字符串是否为数组前缀
  2. AD20使用中文菜单
  3. ecplise 多工程项目如何进行树形展示
  4. 通过Playbook部署LAMP(5)
  5. mysql字符串逆时针旋转180度_mysql 函数示例(转)
  6. redistemplate注入为null_Windows DLL 注入技术
  7. LeetCode 1093. 大样本统计
  8. sql中数据类型的转换(自己写比较累哈,偷偷懒,转下别人的)
  9. dm8148 开发之---4路解码器tvp5158
  10. OSChina 周三乱弹 —— 究竟是谁走漏风声
  11. 假疫苗事件,错在企业,责任在管理部门
  12. oracle alert下的文件,Oracle 11g alert文件的变化 --
  13. C++学习第六天——数组
  14. 综合日语第一册第八课
  15. PyCharm创建app的两种方式
  16. sql中的iif语句详解
  17. 硬盘备份到新电脑,你需要知道这个技巧
  18. 爱心转发:宝贝,妈妈想死你了!你在哪里啊?(帮忙转一回吧)
  19. 使用SQL语句向表中插入多行数据
  20. python中文文本分词_SnowNLP:?中文分词?词性标准?提取文本摘要,?提取文本关键词,?转换成拼音?繁体转简体的 处理中文文本的Python3 类库...

热门文章

  1. 一个完整的区块链入门整理,良心推荐
  2. Python01_变量类型与基本语法
  3. 继电器与LED小夜灯结合实现控制小夜灯循环亮灭
  4. java 科大讯飞 语音识别 10111错误码出现情况
  5. 基于Stm32f103软件iic利用SH1106驱动0.96寸OLED
  6. 达梦数据库:mysql -dm数据同步dmhs工具搭建
  7. java语言中定义的字节输出流_Java语言中的输入输出流包括字节流、字符流、文件流、对象流以及线程之间通信的管道流,【 】包中的类...
  8. Go语言圣经(中文版)
  9. 果然是人老奸,马老滑,兔子老了不好打
  10. python如何查询数据库_python如何访问数据库