解题思路:最简单的思路

注意事项:列表的使用

参考代码:

n = int(input())
count = 0
a = list(map(int,input().split()))
temp = []     # temp 列表用于临时存储每个小朋友在当前轮次要分出去的一半糖果数量
new = []      # 为了不让原有的a[0]接收a[1]的一半后改变后对后续a[n-1]的影响,新创建一个列表存储分完糖果后每个小朋友的新糖果数

while len(set(a)) != 1:      # 循环条件:使用 while len(set(a)) != 1 来判断所有小朋友的糖果数是否相同,若不同则继续循环。
    new = []
    for i in range(n):
        temp.append(a[i]//2)      # 存储每个小朋友要分出去的一半糖果
 
    for i in range(n-1):
        new.append(a[i]//2 + temp[i+1])     # 存储分完糖果后每个小朋友的新糖果数
    new.append(a[n-1]//2 + temp[0])
    a = new           # 将 new 列表赋值给 a,更新当前每个小朋友的糖果数。
 
    temp.clear()         # 清空temp列表供下一次临时存放
    for i in range(n):    # 检查是否有奇数颗糖的小朋友,有则补发糖果
        if a[i] % 2 != 0:
            a[i]+=1
            count+=1
 
print(count)


其实弄懂了之后temp[]列表可以省略掉,进一步优化:

n = int(input())
count = 0
a = list(map(int,input().split()))
while len(set(a)) != 1:
    new = []
    for i in range(n-1):
        new.append(a[i]//2 + a[i+1]//2)
    new.append(a[n-1]//2 + a[0]//2)
    a = new
    for i in range(n):
        if a[i] % 2 != 0:
            a[i]+=1
            count+=1
print(count)


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论