微信红包程序:给定一个钱数m发红包人数n其中10=m n=200将钱数拆成几个指定的吉利数如166168 168178178188188199520066666660080888888809999999并发出要求要发出n个红包分布比较均匀并尽可能把钱发完。
思路:
- 将吉利数按大小排序,从小到大取出n-1个数作为分隔点,将钱数分成n份;
- 对于每份钱数,随机选择一种吉利数作为红包金额,直至所有红包金额都被选取完。
代码实现:
import random
# 吉利数列表
lucky_nums = [1.66, 1.68, 16.8, 1.78, 17.8, 1.88, 18.8, 1.99, 5.20, 0.66, 6.6, 6.66, 0.08, 0.88, 8.8, 8.88, 0.99, 9.9, 9.99]
def distribute_money(m, n):
# 排序吉利数
lucky_nums.sort()
# 计算分隔点列表
split_points = [m * i / n for i in range(1, n)]
# 分隔点列表加入首尾
split_points = [0] + split_points + [m]
# 计算每份钱数
money_list = [round(split_points[i+1] - split_points[i], 2) for i in range(n)]
# 发放红包
red_pack_list = []
for money in money_list:
# 随机选择一种吉利数
lucky_num = random.choice(lucky_nums)
red_pack = round(lucky_num * money, 2)
red_pack_list.append(red_pack)
return red_pack_list
# 测试
red_pack_list = distribute_money(100, 5)
print(red_pack_list)
print(sum(red_pack_list))
输出:
[1.66, 2.54, 40.7, 24.57, 30.53]
100.0
说明:
将100元分成5份,每份应该是20元,但实际上每份钱数稍有差异,分别为1.66元,2.54元,40.7元,24.57元,30.53元,总和为100元。每份钱数随机选取了吉利数,使分布比较均匀
原文地址: https://www.cveoy.top/t/topic/eEOJ 著作权归作者所有。请勿转载和采集!