中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET如何實現微信搶紅包

發布時間:2021-03-10 10:29:51 來源:億速云 閱讀:179 作者:小新 欄目:移動開發

小編給大家分享一下ASP.NET如何實現微信搶紅包,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

正文

100塊發30個紅包

  ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包

50塊發13個紅包

  ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包

1塊發10個紅包

  ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包ASP.NET如何實現微信搶紅包

發紅包需要滿足以下幾個條件

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如何實現微信搶紅包”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

交口县| 江华| 钟祥市| 郓城县| 樟树市| 炎陵县| 江源县| 平顺县| 黔江区| 城口县| 苏尼特右旗| 兴义市| 集贤县| 毕节市| 鞍山市| 泸定县| 正安县| 天镇县| 抚远县| 醴陵市| 桐柏县| 陆川县| 神农架林区| 新平| 七台河市| 瑞丽市| 藁城市| 同德县| 辽阳县| 张北县| 塘沽区| 泰兴市| 内乡县| 区。| 崇阳县| 南昌县| 南汇区| 庐江县| 科尔| 安化县| 房产|