jshzoi
解题报告——2018级2016第二学期第一周作业
解题报告——2018级2016第二学期第一周作业
D 算24
题目描述
描述
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。
这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。
比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。
输入
输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。
输出
对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。
样例输入
5 5 5 1
1 1 4 2
0 0 0 0
样例输出
YES
NO
代码
#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<cstdlib>
using namespace std;
double a[5];bool flag=false;
void dfs(double b[],int k){
if(flag)return ;
if(k==1){
if(fabs(b[1]-24)<1e-4)flag=true;//解是否正确
}
else for(int i=1;i<=k;i++)
for(int j=1;j<=k;j++)
if(i!=j){
double bb[5];int js=0;
//bb用来存储新状态
//先将没选中的数存入bb
for(int p=1;p<=k;p++)
if(p!=i&&p!=j)bb[++js]=b[p];
double op=1e10;//用来存放计算结果
for(int cf=1;cf<=4;cf++)
switch(cf){
case 1:op=b[i]+b[j];
bb[++js]=op;//将计算结果存入bb
dfs(bb,js);
js--;
break;
case 2:op=b[i]-b[j];
bb[++js]=op;
dfs(bb,js);
js--;
break;
case 3:op=b[i]*b[j];
bb[++js]=op;
dfs(bb,js);
js--;
break;
case 4:if(b[j]!=0){op=b[i]/b[j];
bb[++js]=op;
dfs(bb,js);
js--;}
break;
}
}
}
int main(){
while(1){
flag=false;
for(int i=1;i<=4;i++)
cin>>a[i];
if(a[1]==0)break;//是否读完
dfs(a,4);
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
分析
这题的状态是k个数;
当在只有一个数时那便是问题有解了;所有出口为一个数;
可能的路径:以四变三为例+,*有十二种,/,-有二十四种,总共会有三十六种;
但其中会有可行性判断:除法是除数为0时便不可以;
不过在其中要维护状态那便用a数组和k;
不过为了省时间可以在有正确解(如果le-4)时出去;
没有时用bb存储没有选到的数,然后用switch列举可能的四种运算;
注意:要用double 来存储因为如题目上讲的会有分数;
算法:穷举算法;
jshzoi的更多相关文章
随机推荐
- LintCode Longest Common Subsequence
原题链接在这里:http://www.lintcode.com/en/problem/longest-common-subsequence/ 题目: Given two strings, find t ...
- CXF WebService整合SpringMVC的maven项目
首先推荐博客:http://www.cnblogs.com/xdp-gacl/p/4259481.html http://blog.csdn.net/hu_shengyang/article/de ...
- 【Python + Selenium】Mock Testing 是啥?一个so上的高票答案。
There are many kinds of testing which really made me confused. To be honest, I've never heard of som ...
- Android下OpenCV的环境搭建
目录(?)[-] 前言 系统环境 相关工具 Android ADT环境搭建 Android SDK环境变量的配置 Android NDK的安装与配置 OpenCV for Android 环境搭建 基 ...
- Life Cycle of Thread – Understanding Thread States in Java
Life Cycle of Thread – Understanding Thread States in Java 深入理解java线程生命周期. Understanding Life Cycle ...
- 基于Centos7+Nginx+Tomcat8的负载均衡服务器的搭建
由于工作的需求,在使用中,需要搭建负载均衡,研究了Apache+Tomat负载均衡的方案,并且通过检索相关的文章,进行了比较发现,Apache负载负载均衡在使用的效率上,远远不如Nginx的效率高,因 ...
- Nodejs&express+mongodb完成简单用户登录(即Nodejs入门)
刚了解nodejs,发现nodejs配置起来不复杂,但也有很多需要注意的地方,今天就记录一下,以后也可拿出来看看. 要完成这个简单的示例,从零开始,走三步就行了. 一.搭建开发环境 二.创建项目(ex ...
- html5,单击文字自动获得焦点
<p><label for=""></label>这样单击后自动获得焦点</p>
- 此操作失败的原因是对 IID 为“{000208DA-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface
有些电脑报错,有些电脑正常. 环境:VS2010 WinForm程序, Office2007 C#操作Excel时报错.错误: 无法将类型为“System.__ComObject”的 COM 对象强制 ...
- CSS 文字垂直居中
原始 demo html <div class ="box"> <div class="text"> 我是单行测试文字 </div ...