def main(m, n): if m > n >0: m_30 = m * 0.3 print("单人上限:", m_30) if n-1+int(m*0.3) > m or m/n > m_30: # 判定平均分是否会超过 30%等乱七八糟的可能 return []
re_ = [1 for i in range(n)] # 默认每人一块 re_n = [i for i in range(n)] # 分钱团队 m -= n # 去掉默认的钱 while m > 0: # 奖池还有钱 random_n = random.choice(re_n) # 随机没有超过限额的人 re_[random_n] += 1 # 这个人多一块 if re_[random_n] > m_30: # 这个人超过了限额 re_[random_n] -= 1 # 这个人少一块 re_n.pop(re_n.index(random_n)) # 分钱团队删除这个人 continue # 继续分钱 m -= 1 # 奖池减少一块 return re_ elif m == n: return [1 for i in range(n)] else: return []
if __name__ == "__main__": s = 500 # 总奖金 r = 17 # 总人数 result = main(s, r) if result: print(result) else: print("No solution")