微信红包程序
问题描述:给定一个钱数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