PHP前端开发

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

百变鹏仔 3周前 (03-13) #前端问答
文章标签 实例

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

正文

100块发30个红包

50块发13个红包

1块发10个红包

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

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

实现思路
1.首先要确定最小单位,这里是精确到分,我这里以int类型进行计算,得出的结果也全是int类型
2.数据均匀,这里以  13.余数处理,当数据平均给20个红包,肯定跟总金额有所偏差,这时候我们就要多退少补,如果大于总金额,让红包金额多的去减少(总金额/总人数),如果还有剩余,就让第二多的去减少,直到补完这个空缺为止,反之亦然.
4.打乱顺序,细心的园友可能发现,红包是有顺序规律的,我们必须简单的写个function去打乱它. 

demo 

/// <summary> /// 抢红包 /// </summary> /// <param> /// <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 <pre class="brush:csharp;">/// <summary> /// 余数处理 /// </summary> /// <param> /// <param> /// <returns></returns> public List<int> checklist(int money, int pjs, List<int> list) {  if (money != 0)  {  if (money &gt; 0)  {   List<int> list_order = maopao(list);   //给最小   if (money / pjs == 0)   {      list_order[0] += money;   }   else   {   for (int i = 0; i  list_order = maopao(list,"desc");   //给最大   if (money / pjs == 0)   {   list_order[0] += money;   }   else   {   for (int i = 0; i <pre class="brush:csharp;"> /// <summary>  /// 冒泡排序  /// </summary>  /// <param>  /// <param>  /// <returns></returns>  public List<int> maopao(List<int> list,string order = "asc")  {  if (order != "asc")  {   for (int i = 0; i  list[j])   {    int temp = list[j];    list[j] = list[j + 1];    list[j + 1] = temp;     }   }   }  }  else   {   for (int i = 0; i <pre class="brush:csharp;">/// <summary> /// 打乱顺序  /// </summary>  /// <param>  /// <returns></returns> public List<int> suiji(List<int> list)   {  Random rnd = new Random();  for (int i = 0; i </int></int>