【基础入门题032】分糖果问题

简介: 【基础入门题032】分糖果问题

【基础入门题】2021.11.28

10个小孩围成一圈分糖果,老师分给第1个小孩10块,第2个小孩2块,第3个小孩8块,第4个小孩22块,第5个小孩16块,第6个小孩4块,第7个小孩10块,第8个小孩6块,第9个小孩14块,第10个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问:经过几轮操作所有小孩手中的糖块数一样多,糖果的块数都是几?


编程语言:包括但不限于Python

题目来源:派森特给站每日刷题频道

————————————————


方法一: while条件,取列表某一元素*列表长度与原列表比较



candy = [10,2,8,22,16,4,10,6,14,20]
count = 0
size = len(candy)
print(count,candy)
while [candy[0]]*size!=candy:
    count += 1
    mid = [0]
    for i in range(size):
        t = (candy[i]+1)//2 #不管是否偶数都加1后整除2,事实偶数的等于没要那一颗
        mid.append(t) #每个小朋友的一半糖果数先暂存起来
        candy[i] = t
    mid[0] = mid[-1] #第一个小朋友拿最后一个的,相当于围成一圈
    for i in range(size):
        candy[i] += mid[i] #都加上左边小朋友的一半糖数
    print(count,candy)
print(f'经过{count}次,大家的糖都是{candy[0]}块。')



   运行结果:

   0 [10, 2, 8, 22, 16, 4, 10, 6, 14, 20]

   1 [15, 6, 5, 15, 19, 10, 7, 8, 10, 17]

   2 [17, 11, 6, 11, 18, 15, 9, 8, 9, 14]

   3 [16, 15, 9, 9, 15, 17, 13, 9, 9, 12]

   4 [14, 16, 13, 10, 13, 17, 16, 12, 10, 11]

   5 [13, 15, 15, 12, 12, 16, 17, 14, 11, 11]

   6 [13, 15, 16, 14, 12, 14, 17, 16, 13, 12]

   7 [13, 15, 16, 15, 13, 13, 16, 17, 15, 13]

   8 [14, 15, 16, 16, 15, 14, 15, 17, 17, 15]

   9 [15, 15, 16, 16, 16, 15, 15, 17, 18, 17]

   10 [17, 16, 16, 16, 16, 16, 16, 17, 18, 18]

   11 [18, 17, 16, 16, 16, 16, 16, 17, 18, 18]

   12 [18, 18, 17, 16, 16, 16, 16, 17, 18, 18]

   13 [18, 18, 18, 17, 16, 16, 16, 17, 18, 18]

   14 [18, 18, 18, 18, 17, 16, 16, 17, 18, 18]

   15 [18, 18, 18, 18, 18, 17, 16, 17, 18, 18]

   16 [18, 18, 18, 18, 18, 18, 17, 17, 18, 18]

   17 [18, 18, 18, 18, 18, 18, 18, 18, 18, 18]

   经过17次,大家的糖果都是18块。



方法二:while条件:列表与倒序的和排序后的都相等即完成任务

candy = [10,2,8,22,16,4,10,6,14,20]
count = 0
size = len(candy)
print(count,candy)
while not candy==candy[::-1]==sorted(candy):
    count += 1
    mid = [0]
    for i in range(size):
        t = (candy[i]+1)//2 #不管是否偶数都加1后整除2,事实偶数的等于没要那一颗
        mid.append(t) #每个小朋友的一半糖果数先暂存起来
        candy[i] = t
    mid[0] = mid[-1] #第一个小朋友拿最后一个的,相当于围成一圈
    for i in range(size):
        candy[i] += mid[i] #都加上左边小朋友的一半糖数
    print(count,candy)
print(f'经过{count}次,大家的糖都是{candy[0]}块。')


目录
相关文章
LeetCode题解-让所有学生保持开心的分组方法数
LeetCode题解-让所有学生保持开心的分组方法数
|
5月前
LeetCode575——分糖果
LeetCode575——分糖果
25 0
|
6月前
|
C语言
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
wustojc2013分糖果
wustojc2013分糖果
42 0
wustojc2013分糖果
|
算法
算法题每日一练---第24天:海盗分金币
5 个海盗,相约进行一次帆船比赛。比赛中天气发生突变,他们被冲散了。
269 0
算法题每日一练---第24天:海盗分金币
PTA 1064 朋友数 (20 分)
如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。
111 0
|
C++
分糖果(C++)
Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。医生建议 Alice 要少摄入糖分,只吃掉她所有糖的。枚糖的情况下,可以吃到糖的 最多 种类数。,返回: Alice 在仅吃掉。给你一个长度为 n 的整数数组。
132 0
|
人工智能 BI
L3-001 凑零钱 (30 分)
L3-001 凑零钱 (30 分)
155 0