problem

  • 给定4个数,加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。
  • 问是否存在一种方式使得得到的表达式的结果等于24。

solution

正常的中缀表达式枚举和计算难度都约等于0,麻烦的是括号的枚举和处理。
这里只要求满足的结果,所以换一种方式拿掉括号——打乱顺序即可(括号的用处本质就是改变运算顺序),,

  • 做法就是通过枚举排列或者随机运算的方式去掉括号,剩余的运算符和数字丢到一起DFS即可。
  • 具体写法就是每次从剩余的数中随机取出两个数,并用加减乘除合并它们。
  • 小技巧:用排序代替数组来去掉不用位置写起来比较简单。(避免枚举的时候判断,也优化了效率。

codes

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int uinf = -10000000;//过程值可以为负,所以要够小double a[5]; bool flag;
double opv(double x, double y, int op){if(op==1)return x+y;if(op==2)return x-y;if(op==3)return x*y;if(op==4)return x/y;
}
void dfs(int x){sort(a+1,a+5);//用排序的方法把位置去掉if(flag)return ;if(x == 4){if(abs(a[4]-24)<0.001)flag = 1;//注意精度问题return ;}double b[5]; for(int i = 1; i <= 4; i++)b[i] = a[i];//在剩余的所有数里随便选2个for(int i = x; i <= 4; i++){for(int j = x; j <= 4; j++){if(i == j)continue;for(int k = 1; k <= 4; k++){//随便选一种运算a[i] = opv(a[i],a[j],k);a[j] = uinf;dfs(x+1);for(int i = 1; i <= 4; i++)a[i] = b[i];}}}
}int main(){while(cin>>a[1]>>a[2]>>a[3]>>a[4] && a[1]){flag = 0;dfs(1);if(flag)cout<<"YES\n";else cout<<"NO\n";}return 0;
}

【NOI OpenJudge1789】算24(搜索)相关推荐

  1. NOI 1789:算24

    第一次见到这道题目的时候是大一上学期期末考试,那时候只是听过什么搜索什么的,具体没怎么用过,今天恰好看到这道题目,虽然还是没学算法,但是还是能够用自己的方法理解的. 具体的思想就是:四个数中随机取两个 ...

  2. 速算C语言程序设计,C语言速算24数据结构课程设计最终版(备份存档)

    <C语言速算24数据结构课程设计.doc>由会员分享,可免费在线阅读全文,更多与<C语言速算24数据结构课程设计(最终版)>相关文档资源请在帮帮文库(www.woc88.com ...

  3. HDU 1427 速算24点 (深搜)

    题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...

  4. 速算C语言程序设计,C语言程序设计课程设计-速算24.doc

    该设计论文已经通过各大高校老师审核认可并通过答辩,准确完整无误.欢迎大家下载学习交流.如有疑问可随时联系店主,竭诚为您解答!! 应用技术学院 课 程 设 计 报 告 课程名称 C语言课程设计 课题名称 ...

  5. python二十四点_Python秒算24点,行还是不行?

    周末闲来无事,看到隔壁家的老王在和隔壁家的媳妇玩24点,就进屋看了看.发现老王是真不行啊,那不行,这也不行. 就连个24点都玩不过他媳妇,给他媳妇气的,啥都不能满足,这不能,那也不能. 我坐下来和他媳 ...

  6. OpenJudge NOI 1.8 24:蛇形填充数组

    [题目链接] OpenJudge NOI 1.8 24:蛇形填充数组 [题目考点] 1. 二维数组 [解题思路] 解法1:移动焦点 设焦点位置,焦点移动同时为焦点位置赋值.焦点移动规则为: 移动到右上 ...

  7. 信息学奥赛一本通 1076:正常血压 | OpenJudge NOI 1.5 24:正常血压

    [题目链接] ybt 1076:正常血压 OpenJudge NOI 1.5 24:正常血压 [题目考点] 1. 循环统计连续处于某种状态的次数 例: 输入一个由英文数字组成的字符串,求其中最多连续出 ...

  8. 用Python算24点

    小外甥女的课后作业是算24点,看了一下题目,发现都挺难的,像下面这些: 7 7 3 3 8 8 3 3 5 5 5 1 1 5 7 10 2 5 5 10 只能用加减乘除,算出24点. 发现心算不容易 ...

  9. POJ3983 快算24【暴力】

    快算24 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5375   Accepted: 3245 Description ...

  10. Bailian2787 算24【DFS】(POJ NOI0205-1789)

    问题链接:POJ NOI0205-1789 算24. 2787:算24 描述 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式.现在的问题是,是否存在一种方 ...

最新文章

  1. php的server和location,3、Nginx关于server块和location块的配置
  2. python enumerate用法_【Python】python enumerate用法总结
  3. 关节点和重连通分量,trajan算法实现(python)
  4. 方程组的直接解法和迭代法 python_数据与算法总结——基本数值算法2(线性方程组)...
  5. php会员整合,会员整合Ucenter/Discuz!/PHPWind教程
  6. 使用图片预览插件:vue-photo-preview
  7. 25 个 Vue 技巧,开发了 5 年了,才知道还能这么用
  8. linux常见的危险命令,Linux上最危险的8个命令
  9. python3 os.system 异步执行_《sentos python教程》 Python os.system(command),这样执行的command命令,和主程序是异步的吗?...
  10. python实践答辩ppt_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶没压力!...
  11. C++进阶教程之异常如何处理
  12. Android安全:So分析
  13. MATLAB实现一个简单的车牌识别小程序
  14. UOS Deepin Linux 系统引导丢失修复
  15. Word论文用的各级标题大小
  16. Word界面中无法切换到输入法的解决…
  17. Mac系统安装consul
  18. cigarettes(南阳oj94)
  19. 《财富》杂志评选出必读的75本最睿智的图书
  20. 知乎APP使用 产品体验报告

热门文章

  1. c语言50个小程序,C语言50小程序.doc
  2. java中的criteria_java-jpa-criteriaBuilder使用入门
  3. 内是不是半包围结构_半包围结构(一)
  4. 苹果x来电闪光灯怎么设置_苹果6splus来电没有声音,苹果6sp听筒没有声音怎么回事...
  5. python基础教程电子版-Python基础教程(第2版)PDF文档下载
  6. 怎么实现语音识别_手机语音识别怎么设置
  7. Linux断开进程的某个socket,Linux Socket:如何在客户端程序中检测断开的网络?
  8. SpringSecurity系列(三) Spring Security 表单登录
  9. android版chrome为什么没有扫,android – 无法使用谷歌条码扫描仪
  10. python封装功能讲解_python学习28——面向对象实例讲解与封装