固定金额和人数红包分配算法
Posted 学习伴随一生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了固定金额和人数红包分配算法相关的知识,希望对你有一定的参考价值。
转自:http://www.cnblogs.com/wicub/p/6096897.html
/// <summary> /// 生成红包数组 /// </summary> /// <param name="totalMoney">总金额</param> /// <param name="perMax">最大金额</param> /// <param name="perMin">最小金额</param> /// <param name="totalUser">总人数</param> static decimal[] CalueHB(int totalMoney, decimal perMax, decimal perMin, int totalUser) { int i = 0; //第几人 decimal[] array = new decimal[totalUser];//分配结果集 Random ran = new Random(); for (i = 0; i < totalUser; i++) //保证每个人有最小金额+随机值 { array[i] = perMin + Math.Round((Convert.ToDecimal(ran.NextDouble()) * (totalMoney / totalUser - perMin - 1)), 2); } decimal yet = array.Sum(); // 已分配的总金额 decimal thisM = 0M; //当前随机分配金额 while (yet < totalMoney) { thisM = Math.Round((Convert.ToDecimal(ran.NextDouble()) * (perMax - perMin - 1)), 2); i = ran.Next(0, totalUser); //随机选择人 if (yet + thisM > totalMoney) { thisM = totalMoney - yet; } if (array[i] + thisM < perMax)//判断是否超出最大金额 { array[i] += thisM; yet += thisM; } } Array.Sort(array); yet = 0; for (i = 0; i < totalUser; i++) { yet += array[i]; Console.Write("第{0}人=>分配{1}元,合计分配{2}元\\r\\n", (i + 1).ToString().PadLeft(3, \' \'), array[i].ToString("f2").PadLeft(8, \' \'), yet.ToString("f2").PadLeft(8, \' \')); } return array; }
以上是关于固定金额和人数红包分配算法的主要内容,如果未能解决你的问题,请参考以下文章
拼手气红包算法,保证金额不会随前后顺序进入而变化,微信的红包生成算法改编
拼手气红包算法,保证金额不会随前后顺序进入而变化,微信的红包生成算法改编
面试真题设计一个抢红包算法,单个红包最大不能超过总金额的90%