noi1789:算24——搜索
来源:互联网 发布:徐州市网络电子备课 编辑:程序博客网 时间:2024/06/01 09:02
1789:算24
View Submit Statistics Clarify
总Time Limit: 3000ms Memory Limit: 65536kB
Description
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。
这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。
比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。
Input
输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。
Output
对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。
Sample Input
5 5 5 1
1 1 4 2
0 0 0 0
Sample Output
YES
NO
题目分析:这个题目扩展出状态好想,但如何表达不容易,首先考虑是记录每个数字,和另一个数字的关联运算,记录值,但不同的阶段的返回状态不好记录。
参考了别人的题解。处理的办法和八皇后很像,直接在数中中记录计算后的状态,然后又是模板算法了……
#include <iostream>#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
double a[4];
bool vis[4];
bool dfs(int step)
{
int i,j;
if(step == 4){
for(i = 0; i < 4; ++i)
if(!vis[i])
if(fabs(a[i] - 24) < 0.0001) return true;
return false;
}
else{
for(i = 0; i < 4; ++i)
if(!vis[i])
for(j = i + 1; j < 4; ++j)
if(!vis[j])
{
double tmpi = a[i];
double tmpj = a[j];
vis[j] = true;
a[i] = tmpi + tmpj;
if(dfs(step+1)) return true;//原来这里直接用了return dfs(step+1),当然是错的,找到了返回true,本次找不到不代表别的找不到啊。
a[i] = tmpi*tmpj;
if(dfs(step+1)) return true;
a[i] = tmpi-tmpj;
if(dfs(step+1)) return true;
a[i] = tmpj-tmpi;
if(dfs(step+1)) return true;
a[i] = tmpi/tmpj;
if(dfs(step+1)) return true;
a[i] = tmpj/tmpi;
if(dfs(step+1)) return true;
a[i] = tmpi;;
vis[j] = false;
}
}
return false;
}
int main(){
cin>>a[0]>>a[1]>>a[2]>>a[3];
while(a[0]+a[1]+a[2]+a[3]>1){
memset(vis,0,sizeof(vis));
if(dfs(1)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
cin>>a[0]>>a[1]>>a[2]>>a[3];
}
return 0;
}
0 0
- noi1789:算24——搜索
- noi1789 算24 解题报告
- 搜索——爬山搜索
- 搜索——博弈搜索
- 搜索——广度优先搜索
- 搜索——深度优先搜索
- 搜索——最佳优先搜索
- 搜索算法——深度搜索
- 搜索—二分三分搜索—1004
- 情境搜索—搜索未来之路
- 搜索——1015
- 平衡点——搜索
- 搜索—Problem_1003-Pie
- 搜索—Problem_1004-Toxophily
- 搜索—Problem_1012-Rescue
- 搜索—>深搜广搜拓补排序
- 【Unix/Linux】【命令】【搜索】程序名搜索 —— whereis
- 分布式搜索Elasticsearch——搜索(一)
- tomcat7 源码学习(源码导入eclipse)
- 【精品推荐】像极百度传课iOS版,非常赞的教育类应用
- iOS个人整理08-touch触摸事件和手势识别器
- Yii2 数据操作Query Builder
- 【精品推荐】程序员必定会爱上的十款软件:不用就太浪费了@^@
- noi1789:算24——搜索
- Hibernate注解详细解析
- 定时任务
- java虚拟机类加载过程内存情况底层源码分析及ClassLoader讲解
- 如何与离职员工面谈沟通?
- Execution failed for task:"app:clean"
- OpenGL模板缓冲区---StencilBuffer
- Tomcat 7 源码分析 - 下载 tomcat source code 并导入eclipse
- 仿QQ左滑出现删除,只能有一条记录显示有左滑js实现