一、方案1:即开即中,考虑机会均等,减少金额差较大的几率

可以每次点击时候,随机产生

    static double[] GetRandomMoney(double money, int n){double[] array = new double[n];RedPackage red = new RedPackage() { money = money, count = n };for (int i = 0; i < n; i++){array[i] = GetRandomMoney(red);}return array;}/// <summary>/// 即开即中,考虑机会均等,减少金额差较大的几率/// 随机产生,额度在0.01和剩余平均值*2之间/// </summary>/// <returns></returns>static double GetRandomMoney(RedPackage redPackage){//如果最后一个,返回全部if (redPackage.count == 1){redPackage.count--;return Math.Round(redPackage.money * 100) / 100.00;}//随机生成Random ran = new Random();double min = 0.01;double max = redPackage.money / redPackage.count * 2;double money = ran.NextDouble() * max;money = money <= min ? 0.01 : money;money = Convert.ToInt32(money * 100) / 100.00;redPackage.count--;redPackage.money -= money;return money;}public class RedPackage{/// <summary>/// 剩余红包数量/// </summary>public int count;/// <summary>/// 剩余金额/// </summary>public double money;}

生成5组随机结果如下:

总金额:10.0元  红包个数5
2.71元    2.6元    0.36元    3.52元    0.81元
总计:10

总金额:10.0元  红包个数5
1.2元    4.12元    2.15元    1.38元    1.15元
总计:10

总金额:10.0元  红包个数5
0.88元    1.28元    1.65元    3.84元    2.35元
总计:10

总金额:10.0元  红包个数5
0.53元    2.1元    2.76元    0.94元    3.67元
总计:10

总金额:10.0元  红包个数5
2.71元    1.48元    0.15元    3.68元    1.98元
总计:10

二、方案2: 一次性拆分红包,不考虑机会平等性

    /// <summary>/// 一次性拆分红包,不考虑机会平等性/// 最小单位1 分/// </summary>static double[] DiviedOne(double money, int n){double min = 0.01;if (money < min)throw new Exception("拆分金额不能小于0.01 ");int fen = (int)money * 100;//创建n 个红包数组int[] array = new int[n];//每个红包先填充1分Array.Fill(array, 1);fen -= n;//第二步,随机分配Random ran = new Random();int i = 0;while (fen > 1){int f = ran.Next(fen);array[i % n] += f;fen -= f;i++;}//最后一分钱,补到第一个数组if (fen > 0){array[0] += fen;}return array.Select(q => q / 100.0).ToArray();}

生成5组随机结果如下:

总金额:10.0元  红包个数5
4.85元    2.59元    0.72元    1.52元    0.32元
总计:10

总金额:10.0元  红包个数5
2.3元    6.18元    1.32元    0.16元    0.04元
总计:10

总金额:10.0元  红包个数5
8.66元    0.12元    1.04元    0.16元    0.02元
总计:10

总金额:10.0元  红包个数5
6.33元    0.65元    2.01元    0.75元    0.26元
总计:10

总金额:10.0元  红包个数5
1.77元    5.21元    0.86元    2.1元    0.06元
总计:10

C# 实现拼手气红包算法整理相关推荐

  1. java 红包算法_JAVA实现拼手气红包算法

    实现拼手气红包算法,有以下几个需要注意的地方: 抢红包的期望收益应与先后顺序无关 保证每个用户至少能抢到一个预设的最小金额,人民币红包设置的最小金额一般是0.01元,如果需要发其他货币类型的红包,比如 ...

  2. 拼手气红包算法_二倍均值法

    使用二倍均值法进行的拼手气红包算法 假设M为总金额,N为抢红包人数,那么根据二倍均值法,每次抢到的金额 = 随机区间 (0, M / N X 2) 这个公式可以确保每个人获取的金额的平均值是相等的,不 ...

  3. 拼手气红包java_JAVA实现拼手气红包算法

    实现拼手气红包算法,有以下几个需要注意的地方: 抢红包的期望收益应与先后顺序无关 保证每个用户至少能抢到一个预设的最小金额,人民币红包设置的最小金额一般是0.01元,如果需要发其他货币类型的红包,比如 ...

  4. 微信拼手气红包算法(二倍平均值法)实现示范代码

    二倍平均值法 优势在于不需要先把每个人得多少算出来,只有拆红包的时候才会算出这个人得多少,减少实时算力 同时保证了每个人拼手气得到的平均值相同 设有10个人,红包总额100元. 100/10X2 = ...

  5. 水果礼包拼手气(仿红包拼手气)含拼手气红包算法

    现阶段有个需求: 现有一个水果礼包,礼包包含多品类.多规格.多数量的拼手气小红包生成. 转化为简单json 如: 礼包内有 {A={a1=3, a2=1}, B={b1=1}, C={c1=5}} 有 ...

  6. 拼手气红包算法_线段切割法

    线段切割法就是将红包的总金额视为一段定长的长度,从中随机切(红包份数-1)个点,然后依次将线段分配. 下面是python的实现,当出现相同切割点时重新取点.这个不是最好的解决相同切割点的方法,如果可以 ...

  7. 二倍均值随机算法之抢拼手气红包场景应用

    拼手气类的游戏,更能激发用户购物和社交的趣味性,以及游戏竞争心理,拼手气类的活动甚至可以影响人们消费心理. 拼手气红包就是最简单的例子,哪怕你手气红包只有0.01元,在众多竞争者中脱颖而出,抢到的那一 ...

  8. JAVA 拼手气红包 领取算法 记录

    废话不多说,直接上代码 //平分红包public static final Integer normalPacket = 1;//拼手气红包public static final Integer lu ...

  9. 解析拼手气红包金额划分算法

    文章目录 问题抽象 问题简化 思路一 思路二 思路三 结束语 "叮咚",微信提示音响起,打开手机发现"相亲相爱一家人"的群里收到一个红包,天不负我,这一次终于抢 ...

最新文章

  1. 元学习—Meta Learning的兴起
  2. Redis常用命令入门5:有序集合类型
  3. 安装搜狗输入法之后 Linux Mint 19.1 字体发虚解决方案
  4. 华为荣耀畅玩7c计算机在那,华为荣耀畅玩7C内存多大
  5. ZooKeeper配额指南
  6. 让你开回家过年!特斯拉计划春节前开始交付国产Model 3
  7. 剪枝综述论文阅读:Methods for Pruning Deep Neural Networks
  8. matlab2c使用c++实现matlab函数系列教程-mean函数
  9. 喜乐美容美发管理系统 v20070625 加强版 下载
  10. 如何去除计算机病毒,怎么清除计算机病毒
  11. 苹果cms替换资源_苹果cmsV10整合云转码(PPVOD)插件
  12. Spark高频面试题总结
  13. 如何将XML转换为HL7
  14. oracle单表空间预估,使用ARIMA和腾讯的Metis时序数据异常检测来预测系统空间容量变化趋势...
  15. 【分库分表ShardingSphere】
  16. 如何快速分割多个视频,提取每个原音频单独保存
  17. AndroidStudio 自带avd模拟器WiFi网络受限无法连接
  18. Python量化交易平台开发教程系列1-类CTP交易API的工作原理
  19. Android 和 H5 交互-框架篇
  20. 大多数日志文件的后缀名是_log4j(添加日志)

热门文章

  1. 【日常点滴012】python中pandas入门操作方法整理
  2. LaTeX学习总结3(基本结构框架)
  3. 有妖气漫画的图片地址分析
  4. 土木工程爆破队-冲刺总结
  5. 如何培养职业道德素质
  6. 随机过程笔记(二):布朗运动
  7. 架构师:说一说什么是面向对象?
  8. Python Tkinter——五子棋游戏
  9. Python 在连接数据库的时候报错
  10. “练习一万小时”定律