小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
问题描述
我们现在有candies个糖果,打算把他们分配给排好队的n个小朋友。我们采取下面这种分配策略。给第一个小朋友1颗糖果,第二个小朋友2颗,依此类推,直到给最后一个小朋友n颗糖果。然后,我们再回到队伍的起点,给第一个小朋友n + 1颗糖果,第二个小朋友n + 2颗,依此类推,直到给最后一个小朋友2 * n颗糖果。重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就算我们手中的剩下糖果数不够(不比前一次发出的糖果多),这些糖果也会全部发给当前的小朋友。返回一个长度为n、元素之和为candies的数组,以表示糖果的最终分发情况(即 ans[i] 表示第 i 个小朋友分到的糖果数)。
示例:
输入:candies = 9, n= 3
输出:
解释: 第一次,ans[0] += 1,数组变为 [1,0,0,0]。 第二次,ans[1] += 2,数组变为 [1,2,0,0]。 第三次,ans[2] += 3,数组变为 [1,2,3,0]。 第四次,ans[3] += 3(因为此时只剩下 3 颗糖果),最终数组变为 [1,2,3,3]。
分析问题
拿到这个问题最直观的想法就是不断的把糖果分配给n个小朋友,直到把糖果分配完为止。下面我们来看一下代码如何实现。
def distributeCandies(candies,n):
ans=[0]*n
i=0
while candies>0:
#分配给哪个人了
index=i%n
ans[index]=ans[index]+min(i+1,candies)
candies=candies-min(i+1,candies)
i=i+1
return ans
candies=9
n=4
print(distributeCandies(candies,n))