欢迎光临散文网 会员登陆 & 注册

Python编程算法【十五】 分糖果

2022-10-06 13:28 作者:SPC编程爱好者  | 我要投稿

【案例内容】

10个小朋友围成一圈分糖果,老师分给第1个小朋友10块糖果,第2个小朋友2块糖果,第2个小朋友8块,第4个小朋友22块,第5个小朋友16块,第6个小朋友4块,第7个小朋友10块,第8个小朋友6块,第9个小朋友14块,第10个小朋友20块。然后所有小朋友同时将手中的糖果分一半给右边的小朋友,如果糖果数为奇数的小朋友,可以找老师要一块。请问,经过这样操作几次后,大家的糖果数一样多?每个人各有多少块糖果?


【解题思路】

用一列表存储10个小朋友的糖果数,如 candies = [10, 2, 8, 22, 16, 4, 10, 6, 14, 20],接着判断其中是否存在奇数的糖果数,若有则将其+1,也就是题目中“找老师要一块”。若没有,则可使用列表推导式,快速获得取半后的新列表。根据题意,第1个小朋友把自己的一半交给第2个小朋友,以此同时,第2个小朋友也把自己的一半交给第3个小朋友,按此操作,直到第10个小朋友把自己的一半交给第1个小朋友。需注意的是,每个小朋友要先把自己手中一半的糖果交给下一位,再获取上一位小朋友的糖果。使用循环反复操作后,最终每个小朋友的糖果数一样多即停止,并得出循环的次数,以及每个小朋友最终的糖果数。


【Python代码】

分别使用3个函数,处理相应的步骤
经过17次分配后,每个人的糖果数都是18个

在编程过程中,如果逻辑结构比较多,可以考虑采用函数来解决,避免将所有代码都杂糅在一起,不方便查看和分析。本题用1个函数专门处理糖果为奇数的过程;用1个函数专门处理将自己糖果数一半分出去,并加上前一位传过来的糖果数,此时可先处理第10个小朋友传给第1个小朋友的糖果数,再用循环处理后面9位小朋友的糖果数。最后再用1个函数专门判断列表中的数值是否相等,即糖果数是否一样,返回值是True或False。主程序中,设置变量n,记录次数,通过while循环进行累加,直到最终糖果数一样时,得出n的值,此时candies列表中的每个数值也都相等。


Python编程算法【十五】 分糖果的评论 (共 条)

分享到微博请遵守国家法律