问题描述 :
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。
一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
------------
需要注意的是轮每个人是把自己从一轮开始最初有的偶数个糖果的分给左边的人,并不是动态的在得到右边人给的糖果之后再折半给左边的人,知道这一点就简单了。
代码注释很详细,希望可以帮到你。
代码如下:
```python
peo_nums=int(input())
candy_nums=list(map(int,input().split())) #输入每人的糖果数量
count=0 #计老师补发的糖果数
while len(set(candy_nums))>1: #len(set(candy_nums))用来判断里面不同元素的个数
candy_nums1=[i for i in candy_nums] #用于减半计算
"""将candy_nums的元素复制到candy_nums1中,注意不能直接candy_nums1=candy_nums,因为这样会使candy_nums与candy_nums1
指向同一个列表。"""
for i in range(peo_nums):
if i==0:
"""第一个元素比较特殊,它是得到最后一个元素的一半"""
candy_nums[i]=candy_nums1[0]//2+candy_nums1[-1]//2
else:
candy_nums[i]=candy_nums1[i]//2+candy_nums1[i-1]//2
for j in range(peo_nums):
"""遍历糖果数,奇数加一"""
if candy_nums[j]%2 != 0:
candy_nums[j]+=1
count+=1
print(count) #打印输出老师补发的糖果
```
0.0分
2 人评分