算24

简介: 题目链接:http://noi.openjudge.cn/ch0205/1789/总时间限制: 3000ms 内存限制: 65536kB描述给出4个小于10的正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。
题目链接:http://noi.openjudge.cn/ch0205/1789/
总时间限制: 3000ms 内存限制: 65536kB
描述
给出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

算法分析:

参考北大郭炜老师在中国大学mooc的算法基础课程。

n个数算24,必有两个数要先算。这两个数算的结果,和剩余n-2个数,就构成了n-1个数求24的问题。

所以可以递归枚举先算的两个数,以及这两个数的运算方式。

递归的边界条件:一个数算24 。

注意:浮点数比较是否相等,不能用 ==

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 
 5 double a[5];
 6 #define EPS 1e-6
 7 
 8 bool isZero(double x)
 9 {  return fabs(x) <= EPS;  }
10 bool count24(double a[],int n)
11 {//用数组a里的 n个数,计算24
12     if( n == 1 ) 
13     {
14         if(isZero( a[0] - 24) ) return true;
15         else return false;
16     }
17     double b[5];
18     for(int i = 0;i < n-1; ++i)
19         for(int j = i+1;j < n; ++j)//枚举两个数的组合
20         { 
21             int m = 0; //还剩下m个数, m = n - 2
22             for(int k = 0; k < n; ++k)
23                 if( k != i && k!= j) b[m++] = a[k];//把其余数放入b
24             b[m] = a[i]+a[j];
25             if(count24(b,m+1)) return true;
26             
27             b[m] = a[i]-a[j];
28             if(count24(b,m+1)) return true;
29             
30             b[m] = a[j]-a[i];
31             if(count24(b,m+1)) return true;
32             
33             b[m] = a[i]*a[j];
34             if(count24(b,m+1)) return true;
35             
36             if( !isZero(a[j]))
37             {
38                 b[m] = a[i]/a[j];
39                 if(count24(b,m+1))
40                 return true;
41             }
42             if( !isZero(a[i])) 
43             {
44                 b[m] = a[j]/a[i];
45                 if(count24(b,m+1))
46                 return true;
47             }
48         }
49     return false;
50 }
51 int main()
52 {
53     while(true) 
54     {
55         for(int i = 0;i < 4; ++i) cin >> a[i];
56         if( isZero(a[0])) break;
57         if( count24(a,4)) cout << "YES" << endl;
58         else cout << "NO" << endl;
59     }
60     return 0;
61 }

注意:上述代码似乎没有考虑到运算数的原始顺序的问题,但其实从题目举的例子来看,数的顺序可以改变 。

 

相关文章
|
9月前
|
人工智能 自然语言处理 文字识别
《鸿蒙系统中AI技术集成与应用:高效开发之道》
在科技飞速发展的今天,鸿蒙系统与人工智能的融合为开发者带来新机遇。鸿蒙内置AI服务如语音助手、视觉识别等,可直接调用;DevEcoStudio和DevEcoCodeGenie等智能工具简化代码生成;500多款适配鸿蒙的AI类SDK覆盖多场景,降低开发成本;低代码平台助力快速构建应用;参与鸿蒙社区和开源项目,共享经验与资源。这些优势帮助开发者打造更智能的应用,推动鸿蒙生态繁荣。
386 4
|
9月前
|
人工智能 自动驾驶 数据安全/隐私保护
《人工智能新质生产力:GDP增长的未来引擎,究竟能贡献多少?》
在科技飞速发展的时代,人工智能作为新质生产力的代表,正以前所未有的态势推动全球经济格局变革。据普华永道预测,到2030年AI将带动全球GDP增长14%,相当于15.7万亿美元。在中国,过去三年AI核心产业增速显著,2023年规模达5784亿元,预计2030年超过1万亿元,带动相关产业超10万亿元。AI通过产业升级、消费升级、投资和出口等方面大幅提升生产效率,创造新的经济增长点,尽管存在技术和社会政策的不确定性,但其对GDP的贡献率有望持续提升,为全球经济带来新机遇。
604 5
《人工智能新质生产力:GDP增长的未来引擎,究竟能贡献多少?》
|
11月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据集中存在大量重复值时,如何选择合适的分析方法?
总之,当数据集中存在大量重复值时,需要综合考虑各种分析方法的特点和适用范围,根据具体的分析目标和数据情况选择合适的方法,或者结合多种方法进行综合分析,以获得准确、可靠的分析结果。
419 65
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
AI在自然语言处理中的突破:从理论到应用
AI在自然语言处理中的突破:从理论到应用
397 17
|
10月前
|
人工智能 搜索推荐 iOS开发
OpenAI推出适用于iPhone的ChatGPT,与Apple实现具有里程碑意义的AI整合
OpenAI推出适用于iPhone的ChatGPT,与Apple实现具有里程碑意义的AI整合
|
11月前
|
网络协议 算法 数据库
OSPF中的Stub区域详解
OSPF中的Stub区域详解
534 2
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
深度探索人工智能中的自然语言处理技术#### 一、
【10月更文挑战第28天】 本文旨在深入剖析人工智能领域中的自然语言处理(NLP)技术,探讨其发展历程、核心算法、应用现状及未来趋势。通过详尽的技术解读与实例分析,揭示NLP在智能交互、信息检索、内容理解等方面的变革性作用,为读者提供一幅NLP技术的全景图。 #### 二、
584 1
|
10月前
|
UED
链动2+1模式开发规则分析:独特机制实现快速裂变
链动2+1模式是一种基于私域或社交电商的商业模式,通过“分享+邀请”机制设定代理和老板两种身份,结合直推奖、见点奖等多种奖励,促进用户裂变,快速扩大用户规模,同时确保团队稳定和用户体验。该模式规则简单,易于理解,具有快速裂变拓客、低门槛高收益及合规性保障等优势。
|
开发框架 搜索推荐 数据中心
KDD2024最佳学生论文解读,中科大、华为诺亚:序列推荐新范式DR4SR
【9月更文挑战第25天】近年来,随着人工智能技术的发展,序列推荐系统(SR)因能捕捉用户动态偏好而在日常生活中愈发重要。然而,数据质量问题常被忽视。为解决此问题,中国科学技术大学与华为诺亚方舟实验室联合提出DR4SR,一种通过数据集再生提升序列推荐系统性能的新范式。DR4SR采用模型无关的数据再生方法,增强数据集的多样性和泛化能力,且可通过DR4SR+进行个性化调整以适应不同模型需求。实验表明,DR4SR和DR4SR+在多个数据集上显著提升了推荐系统性能。尽管面临计算资源和过拟合风险等挑战,该范式仍展现出巨大潜力。
319 7
|
存储 缓存 容灾
微服务与配置中心:别让您的微服务被配置管理“绊”了一跤
在“史前”单体巨兽型应用时代,配置管理不是什么大不了的事情,但今天在微服务架构中,配置管理已发生革命性的变化,但业内对这一块的前沿探索一直处于秘而不宣的状态,如果我们对这块没有过深入的思考和实践,我们很难真正理解为什么 Spring Cloud 会提出 Configuration Service 的概念。
9293 0