微信搶紅包ASP.NET代碼輕鬆實現_實用技巧

來源:互聯網
上載者:User

群裡都在玩搶紅包,搶了再發,發了再搶,簡直是無聊,程式員感興趣是的如何?,這裡簡單說說實現思路,附上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微信開發教程匯總》,歡迎大家學習閱讀。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.