999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

微信紅包算法分析及實(shí)現(xiàn)

2016-11-08 08:51:42曾凡秩
新教育時代電子雜志(教師版) 2016年17期
關(guān)鍵詞:微信用戶

曾凡秩

(湖南工程職業(yè)技術(shù)學(xué)院 湖南長沙 410151)

微信紅包算法分析及實(shí)現(xiàn)

曾凡秩

(湖南工程職業(yè)技術(shù)學(xué)院 湖南長沙 410151)

微信紅包是現(xiàn)代生活中人們都非常喜歡的一項(xiàng)活動,在節(jié)假日、在聚會活動中,人們經(jīng)常用發(fā)微信紅包的方式來增加節(jié)假日和活的氣氛。本文就微信紅包的條件、生成算法、代碼實(shí)現(xiàn)、紅包驗(yàn)證進(jìn)行了探討。基本達(dá)到了微信紅包的效果。

微信紅包 隨機(jī)紅包算法 代碼實(shí)現(xiàn) 紅包驗(yàn)證

微信紅包是現(xiàn)代生活中人們都非常喜歡的一項(xiàng)活動,在節(jié)假日、在聚會活動中,人們經(jīng)常用發(fā)微信紅包的方式來增加節(jié)假日和活動的氣氛。微信紅包有隨機(jī)紅包和普通紅包,這里分析的是隨機(jī)紅包。

一、隨機(jī)紅包的幾個條件

1.控制總量,就是紅包總金額不超過給定的總金額。

2.控制個數(shù),必須生成給定的紅包個數(shù)。

3.每個紅包的金額有下限,不能是0,至少是0.01元,即1分。

4.單個紅包金額要不要設(shè)置某個上限。

5.每個紅包的大小具有隨機(jī)性,抽到大紅包和小紅包的機(jī)率相等。

6.紅包總金額不少于紅包個數(shù)*分。

二、隨機(jī)紅包算法

比如100元,由10個人分,那么平均一個人是10元錢。然后付款后,系統(tǒng)開始預(yù)裝紅包:

第一份:系統(tǒng)由0~10元之間隨機(jī)一個數(shù),作為這一份的錢數(shù),設(shè)hb1。

第二份:剩下的錢(100-hb1),系統(tǒng)由0~(100-hb1)/(10-1)隨機(jī)一個數(shù),作為這份的錢數(shù),設(shè)hb2。

……

第n份:剩下的錢(100-hb1-hb2-...-hbn_1),作為這個份的錢數(shù),設(shè)為hbn

通過前面的算法,你會發(fā)現(xiàn),生成的最后一個紅包總是最大的,為了防止總是最后一個人抽到最大紅包。采取用戶進(jìn)來拿紅包的時候,系統(tǒng)由0~9之間隨機(jī)生成一個數(shù),隨機(jī)到幾,就取第幾份紅包,然后將這個數(shù)存到peoplehb里,這樣每個人拿到大紅包的機(jī)會就均等了。

三、實(shí)現(xiàn)代碼如下(在Visual Studio 2008用C#實(shí)現(xiàn))

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace wxhb

class Program

public static int hbNum = 10;//hbNum:紅包數(shù)量

//判斷數(shù)組A中是否存在數(shù)據(jù)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:紅包數(shù)組,保存每個紅包事先隨機(jī)分配的金額

float[] peoplehb=new float[hbNum];

Random r=new Random();

for(i=0;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個紅包中隨機(jī)抽一個紅包,記錄第i個紅包位置pos[i]

for(i = 1;i < hbNum;i++)

p = r.Next(0,hbNum);

while(xInArr(p,pos))

p=r.Next(0,hbNum);

pos[i]=p;

Console.Write("{0}, ",pos[i]);

Console.WriteLine();

//按抽取順序把紅包大小顯示出來

for(i = 0;i < hbNum;i++)

Console.Write("{0}, ",Math.Round(hb[pos[i],2));

四、運(yùn)行程序進(jìn)行驗(yàn)證

運(yùn)行第一次分配結(jié)果如下:

預(yù)裝紅包(10個):6.31 , 2.93 , 2.5 , 6.16 , 9.08 , 5.08 , 1.69 ,17.8 , 0.52 ,47.93

用戶領(lǐng)到的紅包順序:1, 0, 8, 7, 5, 3, 4, 9, 6, 2

用戶領(lǐng)取到的紅包大?。?0個):2.93, 6.31, 0.52, 17.8, 5.08,6.16, 9.08, 47.93, 1.69, 2.5

運(yùn)行第二次分配結(jié)果如下:

預(yù)裝紅包(10個):8.89 , 6.25 , 4.96 , 7.16 , 9.05 , 1.49 , 15.01 ,11.08 , 3.98, 32.13

用戶領(lǐng)到的紅包順序:5, 3, 0, 9, 4, 6, 7, 1, 2, 8,

用戶領(lǐng)取到的紅包大?。?0個):1.49, 7.16, 8.89, 32.13, 9.05,15.01, 11.08, 6.25, 4.96, 3.98

運(yùn)行第三次分配結(jié)果如下:

預(yù)裝紅包(10個):7.02 , 0.24 , 6.78 , 9.21 , 3.04 , 11.8 , 2.16 ,11.69 , 15.52, 32.55

用戶領(lǐng)到的紅包順序:4, 8, 0, 7, 5, 9, 1, 2, 6, 3,

用戶領(lǐng)取到的紅包大?。?0個):3.04, 15.52, 7.02, 11.69, 11.8,32.55, 0.24, 6.78, 2.16, 9.21

從運(yùn)行結(jié)果來看,基本符合微信紅包要求,且抽得大紅包的機(jī)會也均等,與選抽取的先后順序無關(guān)。

五、非正常情況驗(yàn)證

1.紅包大小至少為1分。對應(yīng)的代碼為:if(hb[i] < 0.01)hb[i] = 0.01f;

也就是說,如果紅包金額少于1分,則就要給定1分。

現(xiàn)給定金額為0.10,紅包個數(shù)為10,運(yùn)行程序分配結(jié)果如下:

預(yù)裝紅包(10個):0.01 , 0.01 , 0.01 , 0.01 , 0.01 , 0.01 , 0.01 ,0.01 , 0.01 ,0.01

用戶領(lǐng)到的紅包順序:8, 3, 6, 1, 2, 7, 9, 5, 0, 4,

用戶領(lǐng)取到的紅包大?。?0個):0.01, 0.01, 0.01, 0.01, 0.01,0.01, 0.01, 0.01, 0.01, 0.01

發(fā)現(xiàn)每個紅包的金額為1分,與實(shí)際情況一致。

2.紅包總金額轉(zhuǎn)化為單位“分”后少于紅包個數(shù),則沒法正常發(fā)紅包。對應(yīng)代碼為:if(money <= 0.01){ Console.Write("錢太少,不夠分");return;}

現(xiàn)給定金額為0.05,紅包個數(shù)為10,運(yùn)行程序結(jié)果如下:

六、需要改進(jìn)的地方

1.代碼可以進(jìn)一步精減。

2.效率可以更一步提高,速度可以更快。

3.尋找更高速、快捷、有效的算法。

[1]安德森ASP NET高級編程, 清華大學(xué)出版社, 2002

[2] ASP NET程序設(shè)計基礎(chǔ)與實(shí)訓(xùn)教程,清華大學(xué)出版社,2013

[3]Daniel Cazzulino等C#Web應(yīng)用程序入門經(jīng)典,清華大學(xué)出版社,2003

猜你喜歡
微信用戶
微信
微信
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
微信
微信
微信
微信
Camera360:拍出5億用戶
主站蜘蛛池模板: 成人91在线| 亚洲热线99精品视频| 国产一在线观看| 成人国内精品久久久久影院| 精品天海翼一区二区| 欧美日韩动态图| 国产亚洲精品97在线观看| 日韩在线永久免费播放| 欧美激情综合| 亚洲免费福利视频| 狠狠色丁婷婷综合久久| www亚洲天堂| 亚洲成人在线网| 成人毛片免费观看| 国产69精品久久久久妇女| 毛片三级在线观看| 九九线精品视频在线观看| 欧美性天天| 久久精品日日躁夜夜躁欧美| 免费在线国产一区二区三区精品| 无码啪啪精品天堂浪潮av| 在线观看国产网址你懂的| 国产91精品久久| 99久久精品国产自免费| 精品一区二区三区自慰喷水| 国产91特黄特色A级毛片| av一区二区三区高清久久| 国产激爽大片高清在线观看| 国产剧情一区二区| 无码久看视频| 久久超级碰| 久久综合伊人77777| 欧美日韩在线亚洲国产人| 99热最新网址| 97久久精品人人做人人爽| 毛片久久网站小视频| 人人爱天天做夜夜爽| 成人精品午夜福利在线播放| 国产91透明丝袜美腿在线| 国产欧美在线观看视频| 欧美成a人片在线观看| 婷婷丁香色| 伊人久久大香线蕉影院| 草逼视频国产| 香蕉在线视频网站| 五月丁香伊人啪啪手机免费观看| 成人夜夜嗨| 欧美乱妇高清无乱码免费| 久久激情影院| 波多野结衣第一页| 丁香六月激情综合| 国产午夜人做人免费视频中文| 美女一级毛片无遮挡内谢| 欧美国产在线一区| 国产精品毛片在线直播完整版 | 18黑白丝水手服自慰喷水网站| 日本人妻丰满熟妇区| 欧美精品不卡| 日韩一级二级三级| 国产又色又刺激高潮免费看| 色视频国产| 国产精品任我爽爆在线播放6080| 久久精品免费国产大片| 91在线一9|永久视频在线| 国产精品美女在线| 久久久久亚洲AV成人网站软件| 欧美精品H在线播放| 亚洲日韩每日更新| 国产农村妇女精品一二区| 福利国产在线| 亚洲综合网在线观看| 成年人午夜免费视频| 99久久国产综合精品2023| 国产激情影院| 亚洲人成日本在线观看| 国产99在线| а∨天堂一区中文字幕| 久久人搡人人玩人妻精品| 毛片手机在线看| 天堂网亚洲系列亚洲系列| 欧美成人精品一区二区| 久青草国产高清在线视频|