思路:

  1. 将吉利数按大小排序,从小到大取出n-1个数作为分隔点,将钱数分成n份;
  2. 对于每份钱数,随机选择一种吉利数作为红包金额,直至所有红包金额都被选取完。

代码实现:

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元。每份钱数随机选取了吉利数,使分布比较均匀

微信红包程序:给定一个钱数m发红包人数n其中10=m n=200将钱数拆成几个指定的吉利数如166168 168178178188188199520066666660080888888809999999并发出要求要发出n个红包分布比较均匀并尽可能把钱发完。

原文地址: https://www.cveoy.top/t/topic/eEOJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录