微信红包算法MATLAB实现

上午看到基友分享的微信红包算法的文章,代码很短,春节期间红包太火了,看完就也想实现下玩玩,原代码是JAVA的,没接触过JAVA,所以看懂后改成了MATLAB的。

原文链接:微信红包随机算法初探 , 作者:陈鹏。

所写MATLAB代码如下:


% -----------------------------------

 %Test for WeChat MoneyPackageAlgrithm

 % Email:[email protected]

 % 2016.02.13 - 17:32;

% -----------------------------------

close all;

clc;

clear all;

global leftMoneyPackage

MaxTestTimes = 12; % Set as 4*x for display;

row = 4;

col = MaxTestTimes / row;

figure;

for times = 1:MaxTestTimes

    leftMoneyPackage.peoples = 35;

    leftMoneyPackage.leftmoney = 0.35;

    n = leftMoneyPackage.peoples;

    cache = zeros(n,1);

    for i = 1:n

        cache(i) = getRandomMoney();

    end

    subplot(col, row,times);

    bar(cache, 'r');

end


function money = getRandomMoney()

    global leftMoneyPackage

    if (leftMoneyPackage.peoples == 1)

        leftMoneyPackage.peoples = 0;

        money =  round(leftMoneyPackage.leftmoney * 100) / 100;

    else

        minGet = 0.01;

        maxGet = leftMoneyPackage.leftmoney /    leftMoneyPackage.peoples * 2;

        r = random('Uniform', 0, 1);

        money = r * maxGet;

        if(money < minGet)

            money = minGet;

        end

        money = floor(money * 100) / 100;

        leftMoneyPackage.peoples =    leftMoneyPackage.peoples - 1;

        leftMoneyPackage.leftmoney =    leftMoneyPackage.leftmoney - money;

    end

    end


写完做了几组测试(每组重复12次):

1.35个人瓜分0.35元,理论每人为最低值0.01,正确。

微信红包算法MATLAB实现_第1张图片
35个人瓜分0.35元

2.35个人瓜分0.36元,理论34人为最低值0.01,1人0.02,正确。

微信红包算法MATLAB实现_第2张图片
35个人瓜分0.36元

3. 35人瓜分50元,作为普通组。

微信红包算法MATLAB实现_第3张图片
35人瓜分50元

最后建了个小群实际发红包重复跑程序,数据基本能吻合,手气最佳一般在均值2倍附近。

完毕,成就感满满。

想知道具原理及各种说明的点击文章开头链接。


北一  2016.02.13

版权归作者所有,转载请注明作者、出处,其他任何形式的使用请联系我。

你可能感兴趣的:(微信红包算法MATLAB实现)