解题思路:

注意事项:

参考代码:

一、 按顺序传递 不同时发生(利用列表的前后循环) 超时9

        1. 从第一位开始传递一半给最后一位,接着从最后一位开始传递给第二位。依次逆时针传递

        2. 传递结束后需要给奇数个数添加1

        3. 判断糖果是否满足

# 模拟题目倒序遍历

def EqualSweet(SweetList):
    if len(set(SweetList)) != 1:
        return False
    return True

n = int(input().strip())
SweetList = [int(temp) for temp in input().strip().split()]
count = 0

while not EqualSweet(SweetList):
    for i in range(n - 1, -1, -1):
        temp = SweetList[i - n + 1] // 2
        SweetList[i] += temp
        SweetList[i - n + 1] -= temp
    print(SweetList)
    # 使用foreach的话需要把值重新赋值到List中
    for i in range(len(SweetList)):
        if SweetList[i] % 2 != 0:
            SweetList[i] += 1
            count += 1
    print(SweetList)
print(count)


二、 同时传递 AC(每位小朋友保持自己的一半 同时获得前一位小朋友手中的一半)

        1. 创建错序列表 错位相加

        2. 传递结束后需要给奇数个数添加1

        3. 判断糖果是否满足

# 模拟题目倒序遍历
from copy import deepcopy

def EqualSweet(SweetList):
    if len(set(SweetList)) != 1:
        return False
    return True

n = int(input().strip())
SweetList = [int(temp) for temp in input().strip().split()]

count = 0

while not EqualSweet(SweetList):
    # 错位处理
    temp = deepcopy(SweetList)
    # 把末尾放置在首位 相当于从首位开始取给最后一位
    first = temp.pop()
    temp.insert(0, first)
    print(temp)
    # 相当于从第二位开始取开始 即第n个小朋友手中保持自己的一半与前一个小朋友给的一半
    # first = temp.pop(0)
    # temp.append(first)
    SweetList = [SweetList[i] // 2 + temp[i] // 2 for i in range(n)]
    print(SweetList)
    for i in range(len(SweetList)):
        if SweetList[i] % 2 != 0:
            SweetList[i] += 1
            count += 1
print(count)


点赞(0)
 

0.0分

3 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论