解题报告——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的更多相关文章

随机推荐

  1. utils.js

    /** * //2.0检测方式(目测,测量,专用仪器测试等) function GetCheckType() { $.ajax({ url: '@Url.Action("GetCheckTy ...

  2. cocos2dx 3.x(让精灵随着重力感应的方向移动而移动)

    // // GameScene.hpp // HelloWord // // Created by apple on 2017/1/7. // // #ifndef GameScene_hpp #de ...

  3. 按钮点击,打开qq,用做联系客服

    给按钮做链接 <a target=blank href=tencent://message/?uin=这里写QQ号&Site=某某&Menu=yes><img bor ...

  4. mysql入门

    mysql:关系型数据库的一种,用来存储数据: 一个仓库------一个数据库: 一个箱子------ 表: 进入mysql命令行:mysql -uroot -p(密码):查看数据库中所有表:show ...

  5. understanding-论文

    understanding temporal and spatial travel paterns of individual passengers by mining smart card data ...

  6. JMX

    一.为什么使用JMX,解决那些问题 举一个应用实例:在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来写这些代码呢? 写死在程序里,到要改变时就去改程序,然后再编译发布: ...

  7. PAT复杂度_最大子列和问题、最大子列和变种

    01-复杂度1. 最大子列和问题 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j ...

  8. js隐式转换

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object.object是引用类型,其它的五种是基本类型或者是原始类型.我们可 ...

  9. eclipse tomcat 集成

    1. 下载 Tomcat        作者选择的是 Tomcat6,下载地址:http://tomcat.apache.org/download-60.cgi,选择绿色版的 zip 进行下载(目前最 ...

  10. Windows Phone 二十、陀螺仪

    API 示例 // 获取陀螺仪传感器监听对象 Gyrometer gyrometer = Gyrometer.GetDefault(); if (gyrometer == null) { await ...