1.前言
这道题目基本没有任何难度17行解决他,归根到底就是个数据排序问题,这次为了追求极致的精简,删除了大部分的无用代码,没有使用数组等进行数据处理。虽然数据量不大时间优化不明显,但如果涉及海量数据,将会有质的飞跃。废话不多说了,上题目!!!
2.题目
2.1题目情景
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
2.2输入格式
输入包括 77 行数据,分别表示周一到周日的日程安排。每行包括两个小于 1010 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
2.3输出格式
一个数字。如果不会不高兴则输出 0,如果会则输出最不高兴的是周几(用 1,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
3.题目分析
我们可以看出这孩子是个很不喜欢学习的孩子。。。和笔者一样,笔者比他有过之而无不及,一般看一个小时就歇菜了,还要苦逼码字。QAQ
好啦进入正题,我们通过对题目分析发现,本题我们首先需要求解津津每天上课的总小时数目,如果超过8小时就会不开心,然后我就将她记录。如果没有超过8小时就是开心的,这时候只需要输出0。由此可见,本题在输入输出和数据处理上并没有过分的为难我们。下面我们来上代码。
4.代码
由于本次案例较为简单,笔者本着能少敲就少敲的方针,对代码进行了优化,缩短为17行来进行讲解。先放一个完整截图。然后慢慢简述。
4.1循环部分
针对我们这个程序最为核心的就是循环部分,但是在我们赋值的时候是有个坑在这里的。
各位可以看到我的max的初始值赋值为1,这是为了满足后面的if判断语句,否则不满足条件就会导致数据损失。
int a,b,day,max=1; //a,b表示时间,day表示日期,max是最大值 for (int i = 0; i < 7; i++) //七天循环 { scanf("%d %d",&a,&b); if((a+b>max)&&(a+b>8))//大于最大值且大于8 { max=a+b; //更换最大值 day=i+1; //更新天数 } }
4.2数据打印
这里的输出只需要进行判断最后的max是否大于8,如果大于8就输出我们的max否则是0.
if (max>8) printf("%d",day);//判断 else printf("0");
5.总结
这题相对简单,但是越简单就可能想的越复杂,就像笔者开始时候居然想用结构体来储存我们的数据,这个样子就会导致思路越来越远,最后好在笔者浪子回头哈哈哈。好啦今天的文章就到这里了。最后AC绿马护体