青少儿编程Python挑战赛初中组复赛真题【解析】-运动计划,,
青少儿编程Python挑战赛初中组复赛真题【解析】-运动计划,,
小胖为了提高自己的体能制定了运动计划。在第k天时,他必须要完成k个运动项目,否则他就会偷懒。小胖现在拥有n个运动计划,每个计划中有一定数量的项目。但是他十分挑剔,每个计划他只会使用一次,每天也只能使用一个计划中的项目,之后那套计划就会被弃之不用。对于每个计划,他不必完成其中的所有项目。
那么问题来了,小胖最多会坚持运动几天才偷懒呢?
输入描述
第一行:1个整数n,表示有多少个运动计划。例如,如果n=4,这意味着小胖有4个不同的运动计划。
第二行:n个整数a1,a2.… an,分别表示每个运动计划有多少个项目。这些整数表示每个运动计划的项目数量。例如,如果输入是2 4 3 1,这意味着第一个计划有2个项目,第二个计划有4个项目,第三个计划有3个项目,第四个计划有1个项目。
输出描述
输出一个整数,小胖在偷懒前最多坚持运动的天数。
样例1
输入
4
3 1 4 1
输出
3
分析
首先需要读懂题目:如果不理解,我换个说法,小胖有n个苹果,他每天只取一个苹果吃,第一天吃一口,苹果扔掉;第二天吃两口,苹果扔掉;第k天吃k口,苹果扔掉;如果哪一天的那个苹果不够他吃,那么直接扔掉,再换一个,问最后小胖一共吃过几个苹果。
拿样例来说,小胖有4个计划,项目数分别是3、1、4、1,也就是说
第一个计划有3个项目
第二个计划有1个项目
第三个计划有4个项目
第四个计划有1个项目
那么他第一天会优先选择项目最少的第二个计划,完成1个项目,然后第二个计划就被pass掉
第一个计划有3个项目
第二个计划有1个项目
第三个计划有4个项目
第四个计划有1个项目
第二天,他就会从剩下的一、三、四这三个计划中再找一个项目数少的,于是找到了计划四(1项),但是项目四不满足今天的任务(他今天必须完成2个项目),所以第四个计划被pass掉。
重新选,找到第一个计划,有3个项目,满足要求,因此他第二天完成了第一个计划的2个项目,计划一也被pass掉。
第一个计划有3个项目
第二个计划有1个项目
第三个计划有4个项目
第四个计划有1个项目
第三天,只剩下了第三个计划,有4个项目,满足要求,他完成了其中三项,所有计划结束。
因此他总共坚持了3天。
由于运动项目是根据天数逐步增加的,所以在选择计划时优先选择项目少的计划,如果该计划项目数满足当日运动要达到的项目数,坚持天数加1,如果不满足,直接pass,继续看下一个计划,最终统计出坚持的天数。
参考程序:
n=int(input())m=list(map(int,input().split(' ')))k=1#从第一天开始for i in range(n): if k<=min(m): k+=1#最后一天还会+1总数会多一天 m.remove(min(m))print(k-1)#把多加的一天减掉
本站内容未经许可,禁止任何网站及个人进行转载。
评论关闭