随机红包算法java代码 随机红包的算法( 四 )


$data = https://www.04ip.com/post/RedPackageBuilder::getInstance()-getRedPackageByDTO($dto);
//print_r($data);
//随机红包[修数据]
$dto = OptionDTO::create(5,10,0.01,0.99,'RandTriangle');
$data = https://www.04ip.com/post/RedPackageBuilder::getInstance()-getRedPackageByDTO($dto); print_r($data);
//随机红包[不修数据]
$dto = OptionDTO::create(5,10,0.01,0.99,'RandTriangle','Can_Left');
$data = https://www.04ip.com/post/RedPackageBuilder::getInstance()-getRedPackageByDTO($dto);
//print_r($data);
}

5.9
百度文库VIP限时优惠现在开通,立享6亿+VIP内容
立即获取
微信红包随机数字_微信随机红包数详解和算法代码
微信红包随机数字_微信随机红包数详解和算法代码
1 需求
写?个固定红包 + 随机红包
固定红包就是每个红包?额?样,有多少个就发多少个固定红包?额就? 。
随机红包的需求是 。?如红包总?额5元,需要发10个红包 。随机范围是 0.01到0.99;5元必需发完,?额需要有?定趋势的正态分布 。
(0.99可以任意指定,也可以是 avg * 2 - 0.01;?如avg = 5 / 10 = 0.5;(avg * 2 - 0.01 = 0.99))
第 1 页
2 需求分析
2.1 固定红包
如果是固定红包,则算法是?条直线 。t就是固定红包的额度 。如图 。
f(x) = t;(1 = x = num)
image.png
2.2 随机红包
如果我们使?随机函数rand 。rand(0.01,0.99);那么10次随机,如果最坏情况都是?额0.99,总?额就是9.9元 。会超过5元 。?额也会不正态分布 。最后思考了?下借助与数学函数来当作随机红包的发?器,可以?抛物线,三?函数 。最后选定了等腰三?线性函数 。
第 2 页
1 算法原理
如果需要发红包总?额是totalMoney , 红包个数是num个,?额范围是[min,max],线性?程如图 。
image.png
三个点的坐标:
(x1,y1) = (1,min)
(x2,y2) = (num/2,max)
(x3,y3) = (num,min)
确定的线性?程:
$y = 1.0 * ($x - $x1) / ($x2 - $x1) * ($y2 - $y1) + $y1 ; (x1 = x = x2)
第 3 页
$y = 1.0 * ($x - $x2) / ($x3 - $x2) * ($y3 - $y2) + $y2; (x2 = x = x3)
修数据:
y(合) = y1 + y2 + y3 +...... ynum;
y(合)有可能totalMoney ,说明?成?额多了 , 需要修数据,则从(y1,y2,y3.....ynum)这些每次减少0.01 。直到y(合) = totalMoney 。
y(合)有可能totalMoney,说明?成?额少了,需要修数据,则从(y1,y2,y3.....ynum)这些每次加上0.01 。直到y(合) = totalMoney 。
第 4 页
2 算法原理样例
如果需要发红包总?额是11470,红包个数是7400个 , ?额范围是[0.01,3.09],线性?程如图 。
image.png
3 需求设计
3.1 类图设计
image.png
3.2 源码设计
/**
* 随机红包+固定红包算法[策略模式]
第 5 页
*/
//配置传输数据DTO
class OptionDTO
{
//红包总?额
public $totalMoney;
//红包数量
public $num;
//范围开始
public $rangeStart;
第 6 页
//范围结算
public $rangeEnd;
//?成红包策略
public $builderStrategy;
//随机红包剩余规则
public $randFormatType; //Can_Left:不修数据 , 可以有剩余;No_Left:不能有剩余public static function create($totalMoney,$num,$rangeStart,$rangEnd, $builderStrategy,$randFormatType = 'No_Left')
第 7 页
{
$self = new self();
$self-num = $num;
$self-rangeStart = $rangeStart;
$self-rangeEnd = $rangEnd;
$self-totalMoney = $totalMoney;
$self-builderStrategy = $builderStrategy;
$self-randFormatType = $randFormatType;
return $self;
展开全文?
App内免费读全文
前往文库APP签到领畅读卡,免费读微信红包随机数字...全文

推荐阅读