首页 > 编程 > .NET > 正文

微信抢红包ASP.NET代码轻松实现

2024-07-10 12:46:44
字体:
来源:转载
供稿:网友

群里都在玩抢红包,抢了再发,发了再抢,简直是无聊,程序员感兴趣是的如何实现,这里简单说说实现思路,附上dome,代码有点low,好在是实现了,具体内容如下 

正文

100块发30个红包

  

50块发13个红包

  

1块发10个红包

  

发红包需要满足以下几个条件

1.总金额不变
2.每个红包都必须有钱
3.尽量的均匀点,不然抢红包没什么意思了 

实现思路
1.首先要确定最小单位,这里是精确到分,我这里以int类型进行计算,得出的结果也全是int类型
2.数据均匀,这里以  1<n<(剩余金额/剩余红包数)*2,这里防止一个红包抢走大量的钱,这里需要写个递归,去检查数据值是否过大,50元发13个红包的第3图,就是因为没有检查数据,导致钱不平均,这个可以根据自己的玩法去设置.
3.余数处理,当数据平均给20个红包,肯定跟总金额有所偏差,这时候我们就要多退少补,如果大于总金额,让红包金额多的去减少(总金额/总人数),如果还有剩余,就让第二多的去减少,直到补完这个空缺为止,反之亦然.
4.打乱顺序,细心的园友可能发现,红包是有顺序规律的,我们必须简单的写个function去打乱它.   

demo 

/// <summary> /// 抢红包 /// </summary> /// <param name="money"></param> /// <param name="num"></param> /// <returns></returns> public List<int> qhb(int money, int num) {  int min = 1;  int pjs = money / num;  List<int> list = new List<int>();  Random rnd = new Random();  for (int i = 0; i < num; i++)  {  int max = (money / (num - i)) * 2;  int s = rnd.Next(min, max);  s = checkmoney(s, min, max);  list.Add(s);  money -= s;  }  //前面数据都是合理的,结尾必须多退少补  list = checklist(money, pjs, list);  return list; }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表