希望实现的目的是,将一个已知整数,随机分成15或30个整数的和,这15或者30允许出现至多14或者29个0,且被拆分的整数有可能小于15,需要在整个序列中都足够随机,不能出现头重脚轻的情况,只取其中随机的一种结果写入一个list中(即比如将5分成15个整数之和的所有结果中随机取一个结果,写入一个list)
找了很久都没能找到一个可用的方案QAQ脑子快炸了QAQ求帮助
不能出现头重脚轻的情况,只要对生成的列表再随机排序下就好了
可以参考 Python 抢红包算法模拟
import random
def get_random_red_packet(total_amount, quantities):
amount_list = []
person_num = quantities
cur_total_amount = total_amount
for _ in range(quantities - 1):
amount = random.randint(0, cur_total_amount // person_num * 2)
# 每次减去当前随机金额,用剩余金额进行下次随机获取
cur_total_amount -= amount
person_num -= 1
amount_list.append(amount)
amount_list.append(cur_total_amount)
# print(sum(amount_list))
return amount_list
n = int(input("请输入一个整数:"))
amount_list = get_random_red_packet(n,15)
print(amount_list)