梦熊杯-十二月月赛-白银组题解-D.智慧
创始人
2024-05-20 20:28:13
0

D. Problem D.智慧(wisdom.cpp)

内存限制:256 MiB

时间限制:1000 ms

标准输入输出

题目类型:传统

评测方式:文本比较

题目描述:

「须弥」是「智慧」的国度。

布耶尔认为,如果能只使用加号与减号,连接三个整数 a,b,c,使得到的式子的结果为 n,那么 n 就是一个「智慧数」,反之则不是一个「智慧数」。

现在给你一个整数 n,她希望你判断出 n 是否为「智慧数」。

请注意,a,b,c 三个数的顺序可以调换。

输入格式:

四个整数 a,b,c,n。

输出格式:

一个字符串,若 n 为「智慧数」则输出 YES,反之输出 NO


样例:

【样例 1 输入】

5 7 2 4

【样例 1 输出】

YES

【样例 2 输入】

3 10 2 5

【样例 2 输出】

YES

【样例 3 输入】

8 2 9 4

【样例 3 输出】

NO

【样例 4 输入】

5 3 9 1

【样例 4 输出】

YES

数据范围与提示:

【样例解释 #1】

当a=5 ,b=7,c=2 时,b+c-a=7+2-5=4,所以 4 是一个「智慧数」。

【样例解释 #2】

当 a=3,b=10,c=2 时,b-a-c=10-3-2=5,所以 5 是一个「智慧数」。

【样例解释 #3】

当 a=8,b=2,c=9 时,无法构造出一种情况满足条件,所以 4 不是一个「智慧数」。


 【数据范围】

对于10%  的数据,保证a=n 。

对于 30% 的数据,0<=a,b,c,n<=100。

对于 100% 的数据,0<=a,b,c,b<=1000。

思路:

  1.穷举法

  我们这道题的意思是在a  b  c之间添加加好或者减号,让结果等于n,我们可以怎么添加呢?

  1. a+b+c
  2. a-b+c
  3. a+b-c
  4. a-b-c  

  总共有这四种添加运算符合的办法,但是我们真的只用判断上面四种的结果是不是等于n吗? 

  答案是:假的。

  因为题目有特殊说明,a,b,c可以交换顺序,所以我们还有很多种顺序没有交换,那么我们有哪些交换的方法呢?

  1. a  b  c
  2. a  c  b
  3. b  a  c
  4. b  c  a
  5. c  a  b
  6. c  b  a

  我们总共有这些交换法,那么这六种不同的顺序都可以套入上方运算符的添加,所以总共可以有这些运算式:

  1. a+b+c
  2. a-b+c
  3. a+b-c
  4. a-b-c
  5. a+c+b
  6. a-c+b
  7. a+c-b
  8. a-c-b
  9. b+a+c
  10. b-a+c
  11. b+a-c
  12. b-a-c
  13. b+c+a
  14. b-c+a
  15. b+c-a
  16. b-c-a
  17. c+a+b
  18. c-a+b
  19. c+a-b
  20. c-a-b
  21. c+b+a
  22. c-b+a
  23. c+b-a
  24. c-b-a

  我们只需要判断这些运算式的结果是不是等于n,如果等于n那么就输出YES,如果这些运算式的结果都不等于n,那么就输出NO。(这就是穷举法,找到所有的运算式,并计算出结果)(在代码处我们可以看到,其实这上述24四种运算式有重复的)

  2.函数法

  我们可以对于穷举法进行一次代码长度的优化,怎么优化呢?

  我们知道,运算符所有添加方法是这样:

  1. a+b+c
  2. a-b+c
  3. a+b-c
  4. a-b-c  

  我们可以编写一个函数pd,参数见为a,b,c,n,返回值为bool.作用是依次计算出a,b,c添加运算符所有方法的结果,x1,x2,x3,x4. 然后判断x1,x2,x3,x4有没有一个等于n的,如果有就返回true,没有的话就返回false.

  之后在main主函数中,输入a,b,c,n之后,我们只需要依次判断:

  1. a  b  c
  2. a  c  b
  3. b  a  c
  4. b  c  a
  5. c  a  b
  6. c  b  a

  这六种顺序法代入函数pd后的返回值是不是为真,为真的话就输出YES,如果这六种顺序代入函数pd后返回值都是false的话,就输出NO。

  这样子来做,省略了穷举法部分重复计算的代码部分,效率差不多,但是运用函数代码更加的简洁了!

代码:

  1.穷举法代码

#include //万能头文件 
using namespace std; //允许使用std类 
int main(){ //main主函数 int a,b,c,n; //定义 cin>>a>>b>>c>>n; //输入 if(a+b+c==n) //第一种运算式 cout<<"YES"<

  2.函数法代码

#include //万能头文件 
using namespace std; //允许使用std类 
bool pd(int a,int b,int c,int n){ //求出a,b,c中所有搭配运算符的结果是不是有一个等于n int x1=a+b+c,x2=a-b-c,x3=a-b+c,x4=a+b-c; //四种运算符搭配方式 if(x1==n||x2==n||x3==n||x4==n) //是不是有一个等于n return true; //返回为真 return false; //返回为假 
}
int main(){ //main主函数 int a,b,c,n; //定义 cin>>a>>b>>c>>n; //输入 if(pd(a,b,c,n)) //第一种顺序法 cout<<"YES"<

总结:

  运用了函数的代码长度为27行,没有运用函数的代码长度为57行,多了30行的差距,你说函数有多重要了吧,可以很大程度增加你编代码的速度。但是不要乱用函数,毕竟调用函数要多出O(1)的时间,有些时候如果有重复的语句需要使用(大于1次),就可以写成函数。如果只用一次,还要写成函数的话,就多了O(1)的时间开销,这样时间换速度就亏了,还不如不写函数。

题目链接:

​​​​​​​
登录 - 梦熊联盟icon-default.png?t=MBR7http://mna.wang/contest/50/problem/4

相关内容

热门资讯

幼儿园简单评语 幼儿园简单评语(精选15篇)  在平平淡淡的日常中,许多人都写过评语吧,评语是指作说明或讲解用的话。...
人生经典的哲理语录摘录 【精华】人生经典的哲理语录摘录50句  我去旅行,是因为我决定了要去,并不是因为对风景的兴趣。——加...
小学生庆元旦诗歌 小学生庆元旦诗歌(通用5首)  在日常生活或是工作学习中,大家都看到过许多经典的诗歌吧,诗歌能使人们...
淘宝的评语 淘宝的评语(15篇)  在学习、工作或生活中,说到评语,大家肯定都不陌生吧,评语可以对被评价者进行有...
给小学生的赠言 给小学生的赠言给小学生的赠言“焚膏油以继晷,恒兀兀以穷年。”所有天才都是最强壮的牛,他们每天工作十八...
qq空间主人寄语 qq空间主人寄语(通用9篇)  在日常学习、工作和生活中,要用到寄语的情况还是蛮多的,寄语是人们所传...
90后青春文学作品经典语录   爱尔兰雪、土耳其蓝、莫斯科眼泪。我都收藏在小小的太阳里、还有晴天和微笑。波斯湾海、维也纳厅、阿拉...
富有人生哲理的故事 富有人生哲理的两则故事  生命与感染  一位工人野外作业被电击,心脏停止了跳动,做人工呼吸没有效果,...
高中班主任寄语 高中班主任寄语(15篇)  在学习、工作乃至生活中,大家对寄语都再熟悉不过了吧,寄语是人们所传的抑或...
实习小组意见评语 实习小组意见评语大全  在平平淡淡的日常中,许多人都有过写评语的经历,对评语都不陌生吧,评语的内容、...
妈妈对宝宝的寄语   妈妈对宝宝的寄语  1、宝宝,你是上天赐给我们的礼物,我希望即使再过二十年、三十年甚至六十年,当...
人生哲理语句 人生哲理语句大全  人生哲理语句大全  1、世界会向那些有目标和远见的人让路。  2、造物之前,必先...
奋斗励志经典语录 奋斗励志经典语录(精选50句)  无论是在学校还是在社会中,许多人对一些广为流传的语录都不陌生吧,语...
员工工作激励评语   员工工作激励评语  1、他是那么普通,但他在普通的岗位上认真负责,任劳任怨,以自己最大的努力帮助...
最温馨的早安心语 最温馨的早安心语(精选55句)  一日之计在于晨,每天的早上是美好的,如果能再来一句早安心语那就更温...
镜双城小说唯美语录   镜系列长篇奇幻小说的第一部,沧月著。为了找回迦楼罗坠毁后遗失的如意珠,云焕和他的鲛人傀儡湘来到北...
精练哲理的人生格言 关于精练哲理的人生格言汇总  ◆一天不练手脚慢,两天不练丢一半,三天不练门外汉,四天不练瞪眼看。  ...
简单的生活哲理短句摘录 2022年简单的生活哲理短句摘录95句  力尽不知热,但惜夏日长。以下是小编为大家提供的生活哲理短句...
初中班主任经典寄语 初中班主任经典寄语(精选375句)  在日常的学习、工作、生活中,要用到寄语的地方还是很多的,寄语是...
这些都是你给我的爱经典语录   这些都是你给我的爱经典语录  1、希望迷路的时候前方有车可以让我跟随。冷的时候有带电热毯的被窝。...