- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
微信红包算法剖析及实现
微信红包算法剖析及实现
摘 要:微信红包是现代生活中人们都非常喜欢的一项活动,在节假日、在聚会活动中,人们经常用发微信红包的方式来增加节假日和活动的气氛。本文就微信红包的条件、生成算法、代码实现、红包验证进行了探讨。基本达到了微信红包的效果。
关键词:微信红包 随机红包算法 代码实现 红包验证
微信红包是现代生活中人们都非常喜欢的一项活动,在节假日、在聚会活动中,人们经常用发微信红包的方式来增加节假日和活动的气氛。微信红包有随机红包和普通红包,这里分析的是随机红包。
一、随机红包的几个条件
1.控制总量,就是红包总金额不超过给定的总金额。
2.控制个数,必须生成给定的红包个数。
3.每个红包的金额有下限,不能是0,至少是0.01元,即1分。
4.单个红包金额要不要设置某个上限。
5.每个红包的大小具有随机性,抽到大红包和小红包的机率相等。
6.红包总金额不少于红包个数*分。
二、随机红包算法
比如100元,由10个人分,那么平均一个人是10元钱。然后付款后,系统开始预装红包:
第一份:系统由0~10元之间随机一个数,作为这一份的钱数,设hb1。
第二份:剩下的钱(100-hb1),系统由0~(100-hb1)/(10-1)随机一个数,作为这份的钱数,设hb2。
……
第n份:剩下的钱(100-hb1-hb2-...-hbn_1),作为这个份的钱数,设为hbn
通过前面的算法,你会发现,生成的最后一个红包总是最大的,为了防止总是最后一个人抽到最大红包。采取用户进来拿红包的时候,系统由0~9之间随机生成一个数,随机到几,就取第几份红包,然后将这个数存到peoplehb里,这样每个人拿到大红包的机会就均等了。
三、实现代码如下(在Visual Studio 2008用C#实现)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace wxhb
class Program
public static int hbNum = 10;//hbNum:红包数量
//判断数组A中是否存在数据x,存在返回true,不存在返回false
public static Boolean xInArr(int y,int[] a)
int i;
for(i = 0;i hbNum;i++)
if(y == a[i])return true;
return false;
static void Main(string[] args)
//public Boolean xInArr(int y,int[] a);
float money=100;//money:红包总金额
int i;
float[] hb = new float[hbNum];
//hb:红包数组,保存每个红包事先随机分配的金额
float[] peoplehb=new float[hbNum];
Random r=new Random();
for(i=0;ihbNum-1;i++){
if(money = 0.01){ Console.Write(钱太少,不够分);return;}
hb[i] =(float)(r.Next(0,(int)(money*100)))/100/(hbNum-i);
if(hb[i] 0.01)hb[i] = 0.01f;
Console.Write({0} , ,Math.Round(hb[i],2));
hb[hbNum - 1] = money;money = 0;
Console.Write({0} ,Math.Round(hb[i],2));
Console.WriteLine();
int[] pos = new int[hbNum];
int p,j;
for(i = 0;i hbNum;i++)
pos[i] = -1;
p = r.Next(0,hbNum);
pos[0] = p;
Console.Write({0}, ,pos[0]);
//按顺序从10个红包中随机抽一个红包,记录第i个红包位置pos[i]
for(i = 1;i hbNum;i++)
p = r.Next(0,hbNum);
while(xInArr(p,pos))
p=r.
您可能关注的文档
最近下载
- 2025年广东省云浮市小升初数学模拟试卷.pdf VIP
- GB50003-2011:砌体结构设计规范.pdf VIP
- 6MW屋顶分布式光伏项目方案可研报告(EMC).docx
- NHA-509稳态工况法工控柜安装手册V1.1.doc VIP
- 办公设备采购(电脑、打印机等)投标方案.docx VIP
- 南华NHA509汽车排放气体测试仪操作规程24页.pdf VIP
- 苏教版二年级数学上册全单元测试题(可打印).docx VIP
- 可行性研究报告-财务分析表格-全部带公式-准完美版.xls VIP
- PLC控制的Z3050型摇臂钻床电气控制报告讲解.pdf VIP
- 公安局辅警招聘考试试题库《综合理论知识》(含政治理论、法律法规、公安工作基本知识).pdf VIP
文档评论(0)