信息学奥赛一本通(C++版)1111:不高兴的津津/1926:【04NOIP普及组】不高兴的津津

该题目摘录自信息学奥赛一本通(C++版)在线评测系统,文章由CSDN - 专业开发者社区提供支持

【题目描述】

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入】

包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间

【输出】

包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天

【输入样例】

5 3
6 2
7 2
5 3
5 4
0 4
0 6

【输出样例】

3

个人觉得通过率较高的一道题,有兴趣可以和我一起看看。

解题思路

可以先建立一个表示最大值的变量,将它初始值设置为8(>8为不高兴,不需要考虑<8的情况),以便循环结束后判断如果最大值仍是8,那么说明她没有不高兴的日子。然后开始循环,因为我们不知道循环的次数,所以每次循环输入a和b(分别表示学校上课时间和课外班时间),判断它们的总和是否大于最大值,如果是将最大值改为a+b,但是注意题目要求返回的并不是最大值,而是最大值对应的星期几,这里我们将最大值对应日期的变量设置为循环变量i。最后判断如果最大值为8输出0,否则输出最大值对应日期的变量。

或者将数据输入到数组,再依次判断数组内容,但这样做比较麻烦,各位同学下去可以试一试,我们期末揭晓大会(8月20日及以后搜索“北辰萤火_璎珞期末答案揭晓“)公布答案。

正解代码

// ybt.ssoier.cn 1111
#include<bits/stdc++.h>
using namespace std;

int main(){
	int max=8,a,b,x;
	for(int i=1;i<=7;i++){
		cin>>a>>b;
		if(a+b>max){
			max=a+b;
			x=i;
		}
	}
	if(max==8) cout<<0;
	else cout<<x;
	return 0;
}

重点解析

第6 Ⅵ行 max:最大值,默认为8 a:循环中学校上课时长 b:循环中课外上课时长 x:最不高兴的日期

第9 Ⅸ行 判断a+b是否大于max,也就是是否有新的最大值出现。

第10 Ⅹ行 将max设置为a+b,说一下这个数据max虽然不用输出,但是其作为一个参考值,用于判断max是否等于8,以决定津津是否一周没有不高兴的日子。

第11 ⅩⅠ行 如果满足条件,将x临时设为i,也就是当前轮到的这一天。最后输出的时候不可以使用i,因为循环结束,其循环变量自动被释放。

第14 ⅩⅣ行 如果max=8,那么一周都很高兴,输出0。

第15 ⅩⅤ行 否则,输出最不高兴的那天(x)。

这道题考什么

这道题出现在04年NOIP普及组,个人认为其类型是那种骗人题,就是给你讲一大堆废话,其实没多难,需要抓住关键词,理解题目真正的意思,再选择方法解题。考点在于最大值提取的方法(初始值,如何判断切换),循环的熟练程度(循环输入,循环变量的应用),判断语句应用(判断新值和最大值的大小,判断最终最大值)。这17行代码复习时可以简单熟悉一下,过一遍语法,没准运气好考试真有这种题呢。

有什么问题或解法发在评论区,今天就不发投票了。麻烦点个赞,关注收藏,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值