 |
|
knight618
V2EX member #661214, joined on 2023-11-08 15:11:26 +08:00
|
knight618's recent replies
思路就是默认每人一块,剩下的钱一块块的随机给一个人
import random
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")