Date:2019/10/25
Degree of difficulty: ( 普及+/提高
Original question:P1236 算24点

→Happy−begining\to Happy- begining→Happy−begining

24点,一个从小就开始玩的游戏
小学奥数终于又对我下手了

这道题有多种解法,一个就是dfs爆搜,题解上还有后缀表达式和栈来做的,我还是不太会数据结构,就先用dfs写了

先看目录

  1. dfs思路
  2. 坑点
  3. AC code

dfs思路

二十四点,如果做运算的话,每次肯定会有两个数变成一个数,

每次都是两个数变成一个数,而运算就只有四种情况,+ - * /
所以我们得到一个思路,分四步dfs
每次将运算完的结果存到1个数中,并把另一个数打上标记,
这样经过3步就可以得到最后的一个数。

如在2+1 = 3中,我们抽出2 和 1 进行运算,得到的结果是3,那么就用3来更新第一个数1,并把2打上标记,下一次就不挑这个位置了;

这时,我们只需判断最后的计算结果是不是24就可以了

坑点

!

这就要求我们在dfs中注意存贮的问题,具体见代码
思路是:用一个数组,把每次运算的两个数字存起来,再把运算符用数字代替再存起来;
输出的时候在判断;

AC code

#include<bits/stdc++.h>
#include<cstdlib>
using namespace std;
int a[4][4],num[5],fl=-1;bool check (){                        //判断函数,看最后结果是不是24for(int i = 1; i <= 4;i++){if(num[i]==24){return true;}}return false;
}void print(){                      //输出函数for(int i = 1; i <= 3; i ++){if(a[i][1]<a[i][3])    swap(a[i][1],a[i][3]);//让大数放在前面printf("%d",a[i][1]);if(a[i][2]==1)  printf("+");if(a[i][2]==2) printf("-");if(a[i][2]==3)  printf("*");if(a[i][2]==4)  printf("/");printf("%d",a[i][3]);if(a[i][2]==1)   printf("=%d\n",a[i][1]+a[i][3]);if(a[i][2]==2)    printf("=%d\n",a[i][1]-a[i][3]);if(a[i][2]==3) printf("=%d\n",a[i][1]*a[i][3]);if(a[i][2]==4) printf("=%d\n",a[i][1]/a[i][3]);}
}void dfs(int t){if(t == 4){if(check()){fl = 1;print();exit(0);}}int x,y;for(int i = 1; i <= 4;i++){for(int j = 1; j <= 4; j++){if(i != j && num[i] > 0 && num[j] >0){x = num[i]; y = num [j];        //加 a[t][1] = x,a[t][3] = y;a[t][2] = 1;num[i] = x + y;num[j] = -1;                       //相当于打标记dfs(t+1);num[i] = x; num[j] = y;             //回溯x = num[i]; y = num [j];      //减 a[t][1] = x,a[t][3] = y;a[t][2] = 2;num[i] = x - y;num[j] = -1; dfs(t+1);num[i] = x; num[j] = y;                //回溯x = num[i]; y = num [j];      //乘 a[t][1] = x,a[t][3] = y;a[t][2] = 3;num[i] = x * y;num[j] = -1; dfs(t+1);num[i] = x; num[j] = y;                //回溯if((num[j] != 0) && (num [i] % num[j] == 0)){x = num[i]; y = num [j];  //除法 a[t][1] = x,a[t][3] = y;a[t][2] = 4;num[i] = x / y;num[j] = -1; dfs(t+1);num[i] = x; num[j] = y;} }}}
}
int main(){for(int i = 1; i <= 4; i++){scanf("%d",&num[i]);}dfs(1);if(fl == -1){printf("No answer!");}return 0;
}

[DFS] P1236 算24点 ( 普及+/提高相关推荐

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

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

  2. HDU1427 速算24点【DFS】

    速算24点 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. HDU 1427 速算24点(dfs)

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

  4. Pygame实战:家里的小孩数学算数能力很差嘛?别慌—这款“巧算24点小游戏”等你来玩,管用。

    导语 哈喽!每日游戏更新系列--木木子又来啦!今天讲一个大家都很熟悉的游戏! 我第一次玩24点是初中的时候,那时候和堂弟表哥在堂妹家玩,堂妹提出玩24点游戏,堂妹比我 们小三岁,可能正在上小学吧. 拿 ...

  5. 速算24点java_HDU-1427-速算24点

    HDU-1427-速算24点 4个数通过 +,-,*,/和加括号,计算得24, 枚举数字和运算符,DFS即可,注意题目要求计算过程中都不能出现小数,所以做除法时稍作处理 枚举数组可用algorithm ...

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

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

  7. 百练2787:算24题解

    2787:算24 查看 提交 统计 提示 提问 总时间限制:  3000ms  内存限制:  65536kB 描述 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一 ...

  8. HDU-1427-速算24点

    HDU-1427-速算24点 http://acm.hdu.edu.cn/showproblem.php?pid=1427 4个数通过 +,-,*,/和加括号,计算得24, 枚举数字和运算符,DFS即 ...

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

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

最新文章

  1. 中​文​字​号​、​磅​和​像​素​对​照​关​系
  2. 前端学习(2455):layout处理
  3. 2021年商业地产趋势洞察白皮书
  4. 【数字图像处理】求包含白色点得最小凸多边形
  5. java字符串常量存哪里_浅谈JAVA中字符串常量的储存位置
  6. php qr生成二维码
  7. 大学课程为什么不绕过51单片机直接搞STM32来做比赛
  8. Spring Boot 异常处理,值得学习!
  9. 智能优化算法:动物迁徙优化算法-附代码
  10. 服务器声卡硬件安装,win 2008虚拟声卡的配置
  11. 软考信息系统项目管理师知识点总结1
  12. 程序员技能与成长:程序员的必备工具箱(值得收藏)
  13. QNX分布式实时操作系统初步认识-QNX系统了解认识
  14. 华为管理学案例分析_华为战略管理案例分析.docx
  15. 位偏移 java_时区和偏移类 / Zone and Offset
  16. Xcode6 中URL Scheme的具体使用
  17. python安卓吾爱_【原创源码】 【无需第三方库】【支持签到 】 Python 吾爱挂机 无提示版...
  18. 关于千牛移动端纯H5插件和QAP应用中H5页面的概念
  19. 正益移动王国春:布局在是与不是之间
  20. 如何在Chrome浏览器下清除DNS缓存

热门文章

  1. 服务器怎么使用无线网卡,无线上网卡怎么用
  2. 如何快速打造淘宝爆款
  3. win10设置分屏详细教程
  4. 显示器支架什么品牌好?
  5. 【Docker之Swarm详细讲解Swarm集群搭建管理节点工作节点Raft一致性协议overlay网络Docker结合Swarm部署WordPress个人博客实战】
  6. vue在一个方法执行完后执行另一个方法
  7. python在一个函数中调用另一函数中的变量
  8. u盘正常接入后计算机无法看到,U盘连接电脑看不到盘符怎么办?U盘在电脑上不显示盘符解决方法...
  9. 《信息安全系统设计基础》第1周问题总结
  10. excel进阶:如何快速自动填充空白单元格上一行的内容