search
HomeWeChat AppletWeChat DevelopmentASP.NET implementation of WeChat red envelope grabbing code example

Everyone in the group is playing the game of grabbing red envelopes, grabbing them and sending them out, sending them out and grabbing them again. It is simply boring. Programmers are interested in how to implement it. Here is a brief introduction to the implementation ideas, and a dome is attached. The code is a bit low, fortunately, it has been realized. The specific content is as follows

Text

100 blocks will send 30 pieces Red envelope

 

##13 red envelopes for 50 yuan

 

10 red envelopes per block

The following conditions need to be met to issue red envelopes


1. The total amount remains unchanged

2. Each Each red envelope must have money
3. Try to be as even as possible, otherwise it will be meaningless to grab red envelopes

Implementation ideas
1. First of all, we must determine the smallest unit. Here it is accurate to minutes. I use int type for calculation here, and the results are all int type.
2. The data is uniform, here it is 13. Remainder processing, when the data gives an average of 20 red envelopes, there must be a deviation from the total amount. At this time, we have to refund more and make up less. If it is greater than the total amount, let the red envelope The one with the larger amount will reduce it (total amount/total number of people). If there is still something left, let the one with the second largest amount reduce it until the vacancy is filled, and vice versa.
4. Shuffle the order and garden carefully. Friends may find that red envelopes are in order, and we must simply write a function to disrupt it.

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;
 }

The above is the detailed content of ASP.NET implementation of WeChat red envelope grabbing code example. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools