微信红包程序

本文介绍了微信红包程序的设计思路,针对给定的钱数m和人数n,使用随机数算法确保红包分布均匀。根据n和m的不同情况,分别采用不同策略分配吉利数。对于时间复杂度大和可能存在的程序bug进行了问题分析并提出解决方案。
摘要由CSDN通过智能技术生成

微信红包程序

问题描述:给定一个钱数m和人数n,将钱拆成几个吉利数,如5.20,6.66,8.88,9.99等,要求发出n个红包,分布比较均匀。

一、程序设计思路

​ 对于该问题的求解,我主要运用到了随机数算法。

  • double m;
    int t, n;
    double luckynum[22] = { 0.06, 0.08, 0.09, 0.66, 0.88, 0.99, 1.66, 1.68, 1.78, 1.88, 1.99, 5.20, 6.6, 6.66, 8.8, 8.88, 9.9, 9.99, 16.8, 17.8, 18.8 };//21个吉利数
    

    首先,输入t组测试数据,再分别输入钱数m和发红包的人数n,然后通过判断m和n的大小分成两种情况来讨论。

  • 情况一:需要发红包的人数小于等于21(不同吉利数的总个数)或红包钱数小于120(所有吉利数的和),则前者可以尽量做到吉利数不重样,而后者虽然个数可能大于21,但由于其数额限制,故不能取到所有吉利数(只能多取几次小面额的吉利数)。然后,利用从0到20之间的随机数来选取按从大到小的顺序排列的吉利数,并用while(1)循环控制,直到选取的吉利数的总和等于红包钱数m。否则,剩下的钱数重新赋值为总红包钱数m。最后,输出n个几乎不重复的随机数,即做到红包中的吉利数分布比较均匀。

  • if (n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值