[DFS] P1236 算24点 ( 普及+/提高
Date:2019/10/25
Degree of difficulty: ( 普及+/提高
Original question:P1236 算24点
→Happy−begining\to Happy- begining→Happy−begining
24点,一个从小就开始玩的游戏
小学奥数终于又对我下手了
这道题有多种解法,一个就是dfs爆搜,题解上还有后缀表达式和栈来做的,我还是不太会数据结构,就先用dfs写了
先看目录
- dfs思路
- 坑点
- 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点 ( 普及+/提高相关推荐
- Bailian2787 算24【DFS】(POJ NOI0205-1789)
问题链接:POJ NOI0205-1789 算24. 2787:算24 描述 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式.现在的问题是,是否存在一种方 ...
- HDU1427 速算24点【DFS】
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU 1427 速算24点(dfs)
Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*','/ ...
- Pygame实战:家里的小孩数学算数能力很差嘛?别慌—这款“巧算24点小游戏”等你来玩,管用。
导语 哈喽!每日游戏更新系列--木木子又来啦!今天讲一个大家都很熟悉的游戏! 我第一次玩24点是初中的时候,那时候和堂弟表哥在堂妹家玩,堂妹提出玩24点游戏,堂妹比我 们小三岁,可能正在上小学吧. 拿 ...
- 速算24点java_HDU-1427-速算24点
HDU-1427-速算24点 4个数通过 +,-,*,/和加括号,计算得24, 枚举数字和运算符,DFS即可,注意题目要求计算过程中都不能出现小数,所以做除法时稍作处理 枚举数组可用algorithm ...
- HDU 1427 速算24点 (深搜)
题目链接 Problem Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用' ...
- 百练2787:算24题解
2787:算24 查看 提交 统计 提示 提问 总时间限制: 3000ms 内存限制: 65536kB 描述 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一 ...
- HDU-1427-速算24点
HDU-1427-速算24点 http://acm.hdu.edu.cn/showproblem.php?pid=1427 4个数通过 +,-,*,/和加括号,计算得24, 枚举数字和运算符,DFS即 ...
- 速算C语言程序设计,C语言程序设计课程设计-速算24.doc
该设计论文已经通过各大高校老师审核认可并通过答辩,准确完整无误.欢迎大家下载学习交流.如有疑问可随时联系店主,竭诚为您解答!! 应用技术学院 课 程 设 计 报 告 课程名称 C语言课程设计 课题名称 ...
最新文章
- 中​文​字​号​、​磅​和​像​素​对​照​关​系
- 前端学习(2455):layout处理
- 2021年商业地产趋势洞察白皮书
- 【数字图像处理】求包含白色点得最小凸多边形
- java字符串常量存哪里_浅谈JAVA中字符串常量的储存位置
- php qr生成二维码
- 大学课程为什么不绕过51单片机直接搞STM32来做比赛
- Spring Boot 异常处理,值得学习!
- 智能优化算法:动物迁徙优化算法-附代码
- 服务器声卡硬件安装,win 2008虚拟声卡的配置
- 软考信息系统项目管理师知识点总结1
- 程序员技能与成长:程序员的必备工具箱(值得收藏)
- QNX分布式实时操作系统初步认识-QNX系统了解认识
- 华为管理学案例分析_华为战略管理案例分析.docx
- 位偏移 java_时区和偏移类 / Zone and Offset
- Xcode6 中URL Scheme的具体使用
- python安卓吾爱_【原创源码】 【无需第三方库】【支持签到 】 Python 吾爱挂机 无提示版...
- 关于千牛移动端纯H5插件和QAP应用中H5页面的概念
- 正益移动王国春:布局在是与不是之间
- 如何在Chrome浏览器下清除DNS缓存
热门文章
- 服务器怎么使用无线网卡,无线上网卡怎么用
- 如何快速打造淘宝爆款
- win10设置分屏详细教程
- 显示器支架什么品牌好?
- 【Docker之Swarm详细讲解Swarm集群搭建管理节点工作节点Raft一致性协议overlay网络Docker结合Swarm部署WordPress个人博客实战】
- vue在一个方法执行完后执行另一个方法
- python在一个函数中调用另一函数中的变量
- u盘正常接入后计算机无法看到,U盘连接电脑看不到盘符怎么办?U盘在电脑上不显示盘符解决方法...
- 《信息安全系统设计基础》第1周问题总结
- excel进阶:如何快速自动填充空白单元格上一行的内容