微信红包算法剖析及实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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.

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档