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的更多相关文章
随机推荐
- iOS开发masonry的一些使用简介
从一开始的纯代码计算frame,虽然自认为计算frame 刚刚的,但是到后来还是开始xib的自动约束和手动约束与frame搭配使用,经历这几种方式,大概一年前开始普遍使用masonry来代码约束之后也 ...
- vue 实现分转元的 过滤器
1.啥也不说了直接上代码吧 使用起来超方便 Vue.filter('amount', function (number) { // var number = +val.replace(/[^\d.] ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V3.0 版本强势发布
继上个版本“RDIFramework.NET V2.9版本”的推出,受到了重多客户的认可与选择,V2.9版本是非常成功与稳定的版本,感谢大家的认可与长期以来的关注与支持.V3.0版本在V2.9版本的基 ...
- Hadoop等软件常见运行问题及解决办法
Hadoop常见问题及解决办法 1.问题:java.io.IOException: Could not locate executable null\bin\winutils.exe in the ...
- VIP
高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性.HA系统是目前企业防止核心计算机系统因故 ...
- Abundant Resources
https://github.com/vhf/free-programming-books/blob/master/free-programming-books-zh.md
- poj 3190 Stall Reservations
http://poj.org/problem?id=3190 Stall Reservations Time Limit: 1000MS Memory Limit: 65536K Total Su ...
- ASPX.Net控件
简单控件 Label :显示文字,编译后的元素的为span 主要设置属性边框包括边框颜色,边框样式,边框粗细 Liteal :显示文字,编译后不会产生任何元素,一般用来从后台输出JS代码 Textbo ...
- 我的SpringMVC配置
记住所有导的包都在org.springframework.web.servlet.mvc.annotation.下而不是 org.springframework.web.protlet.mvc.ann ...
- 多线程中共享变量——CCF总决赛试题
题目要求 数据格式 Q 系统的输入为纯文本格式的文件,由若干行组成,每一行由城市编号.年龄.收入组成,相邻两项之间用一个空格分隔.以下是输入的一个片段: 1001 20 12000 1001 50 2 ...