上午看到基友分享的微信红包算法的文章,代码很短,春节期间红包太火了,看完就也想实现下玩玩,原代码是JAVA的,没接触过JAVA,所以看懂后改成了MATLAB的。
原文链接:微信红包随机算法初探 , 作者:陈鹏。
所写MATLAB代码如下:
% -----------------------------------
%Test for WeChat MoneyPackageAlgrithm
% Email:xiaolongjee@mail.nwpu.edu.cn
% 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,正确。
2.35个人瓜分0.36元,理论34人为最低值0.01,1人0.02,正确。
3. 35人瓜分50元,作为普通组。
最后建了个小群实际发红包重复跑程序,数据基本能吻合,手气最佳一般在均值2倍附近。
完毕,成就感满满。
想知道具原理及各种说明的点击文章开头链接。
北一 2016.02.13
版权归作者所有,转载请注明作者、出处,其他任何形式的使用请联系我。