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

2025-05-29 0 47

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

正文

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24
/// <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;

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66
/// <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;

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42
/// <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;

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
/// <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;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 微信抢红包ASP.NET代码轻松实现 https://www.kuaiidc.com/100633.html

相关文章

发表评论
暂无评论