青少儿编程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)#把多加的一天减掉


本站内容未经许可,禁止任何网站及个人进行转载。

评论关闭