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

互联网 17-4-26
群里都在玩抢红包,抢了再发,发了再抢,简直是无聊,程序员感兴趣是的如何实现,这里简单说说实现思路,附上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;   }
/// <summary>   /// 余数处理   /// </summary>   /// <param name="money"></param>   /// <param name="list"></param>   /// <returns></returns>   public List<int> checklist(int money, int pjs, List<int> list)   {    if (money != 0)    {    if (money > 0)    {       List<int> list_order = maopao(list);     //给最小     if (money / pjs == 0)     {        list_order[0] += money;     }     else     {     for (int i = 0; i < money / pjs + 1; i++)     {      if (i == money / pjs)      {      list_order[i] += (money - (money / pjs) * pjs);      }      else      {      list_order[i] += pjs;      }       }     }     return list_order;    }    else    {       List<int> list_order = maopao(list,"desc");     //给最大     if (money / pjs == 0)     {       list_order[0] += money;     }     else     {     for (int i = 0; i < -(money / pjs) + 1; i++)     {      if (i == -(money / pjs))      {      list_order[i] += (money - (money / pjs) * pjs);      }      else      {      list_order[i] -= pjs;      }       }     }     return list_order;    }    }    return list;   }
 /// <summary>    /// 冒泡排序    /// </summary>    /// <param name="list"></param>    /// <param name="order"></param>    /// <returns></returns>    public List<int> maopao(List<int> list,string order = "asc")    {    if (order != "asc")    {     for (int i = 0; i < list.Count; i++)     {     for (int j = 0; j < list.Count - i - 1; j++)     {      if (list[j + 1] > list[j])     {      int temp = list[j];      list[j] = list[j + 1];      list[j + 1] = temp;         }     }     }    }    else     {     for (int i = 0; i < list.Count; i++)     {     for (int j = 0; j < list.Count-i-1;j++)     {      if (list[j+1] < list[j])      {      int temp = list[j];      list[j] = list[j+1];      list[j+1] = temp;       }     }    }    }    return list;   }
/// <summary>   /// 打乱顺序    /// </summary>    /// <param name="list"></param>    /// <returns></returns>   public List<int> suiji(List<int> list)     {    Random rnd = new Random();    for (int i = 0; i < list.Count; i++)    {     int temp = list[i];     int j = rnd.Next(0, list.Count-1);     list[i] = list[j];     list[j] = temp;    }    return list;   }

以上就是ASP.NET实现微信抢红包代码实例的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:微信公众号查看关注者接口的.NET实例教程

相关资讯