1需求
寫?固定紅包+隨機紅包
固定紅包就是每個紅包?呃?樣本,妳有多少發多少固定紅包?呃,只是?。
隨機紅包的需求是。?比如紅包?呃,5塊錢,需要發10紅包。隨機範圍是0.01到0.99;5塊錢必須發完。呃,需要嗎?趨勢不變的正態分布。
(0.99可以任意指定,也可以是AVG * 2-0.01;?如avg = 5/10 = 0.5;;(平均值* 2 - 0.01 = 0.99))
2需求分析
2.1固定紅包
如果是固定紅包,算法是什麽?直線。t是固定紅包的金額。如圖所示。
f(x)= t;(1 & lt;= x & lt=數字)
image.png
2.2隨機紅包
如果我們做?隨機函數rand。蘭特(0.01,0.99);所以10次隨機,如果最壞的情況是全部?金額0.99,合計?呃9.9元。會超過5元。?數額也會不正常分配。終於想到了?借助和數學函數,可以當隨機紅包用嗎?設備,好嗎?拋物線,三?功能。最後我選了等腰三?線性函數。
1算法原理
如果需要發紅包,總是?金額總計為Money,紅包數量為num。額頭的範圍是【最小,最大】,線性?程如圖所示。
image.png
三個點的坐標:
(x1,y1) = (1,min)
(x2,y2) =(數量/2,最大值)
(x3,y3) =(數字,最小值)
確定性線性?程:
$ y = 1.0 *(x-$ x 1)/($ x2-$ x 1)*($ y2-$ y 1)+$ y 1;(x 1 & lt;= x & lt= x2)
$ y = 1.0 *(x-$ x2)/($ x3-$ x2)*($ y3-$ y2)+$ y2;(x2 & lt= x & lt= x3)
維修數據:
y(合計)= y1+y2+y3 +......ynum;
y(組合)可能> TotalMoney,解釋?變成?如果數量太多,需要修改數據,則從(y1,y2,y3...ynum)乘以0.01。直到y(合計)= totalMoney。
y(壹起)可能< TotalMoney,解釋?變成?如果數量很少並且數據需要修改,則從(y1,y2,y3)中添加0.01...ynum)每次。直到y(合計)= totalMoney。
2算法原理示例
如果需要發紅包,總是?金額11470,紅包數量7400。金額的範圍是[0.01,3.09],線性?程如圖所示。
image.png
3需求設計
3.1類圖設計
image.png
3.2源代碼設計
/**
*隨機紅包+固定紅包算法【策略模式】
*/
//配置傳輸數據的DTO
類別選項
{
//紅包?額
公共資金總額;
//紅包數量
公共$ num
//範圍開始
public $ rangeStart
//範圍結算
public $ rangeEnd
//?紅包策略
public $ builderStrategy
//隨機紅包剩余規則
public $ randFormatType//Can_Left:數據可以不修復就留下;No_Left:不能有公共靜態函數create ($ totalmoney,$ num,$ rangestart,$ rangeend,$ builder strategy,$ rand format =' no _ left ')。
{
$self =新的自己();
$ self->;num = $ num
$ self->;rangeStart = $ rangeStart
$ self->;rangeEnd = $ rangEnd
$ self->;totalMoney = $ totalMoney
$ self->;builder strategy = $ builder strategy;
$ self->;randFormatType = $ randFormatType;
返回$ self
}
}
//紅包?完成設備連接?
界面構建策略
{
//創建紅包
公共函數create();
//設置配置
公共函數setOption(options to $ option);
//可以嗎?變成壹個紅包
公共函數iscan builder();
//?紅包功能
公共函數FX($ x);
}
//固定等額紅包策略
EqualPackageStrategy類實現IBuilderStrategy {
//單個紅包?額
公共$ oneMoney
//數量
公共$ num
public function _ _ construct($ option = null)
{
if($ option instance of options to)
{
$ this-& gt;setOption($ option);
}
}
公共函數setOption(options to $ option)
{
$ this-& gt;one money = $ option-& gt;rangeStart
$ this-& gt;num = $ option-& gt;num
}
公共函數create()
{
$ data = array();
if(false = = $ this-& gt;isCanBuilder())
{
返回$ data
}
$ data = array();
if(false = = is _ int($this-& gt;num)| | $ this-& gt;num & lt= 0) {
返回$ data
}
for($ I = 1;$ i & lt= $ this-& gt;num$i++)
{
$ data[$ I]= $ this-& gt;外匯(美元);
}
返回$ data
}
/**
*等額紅包?程是?直線
*
* @param mixed $x
* @訪問公共
* @返回void
*/
公共函數fx($x)
{
return $ this-& gt;oneMoney
}
/**
*妳能搞定紅包嗎?
*
* @訪問公共
* @返回void
*/
公共函數isCanBuilder()
{
if(false = = is _ int($this-& gt;num)| | $ this-& gt;num & lt= 0)
{
返回false
}
if(false = = is _ numeric($this-& gt;one money)| | $ this-& gt;oneMoney & lt= 0)
{
返回false
}
//單個紅包?在1
如果($ this-& gt;oneMoney & lt0.01)
{
返回false
}
返回true
}
}
//隨機紅包策略(3?形狀)
RandTrianglePackageStrategy類實現IBuilderStrategy
{
//總金額
公共資金總額;
//紅包數量
公共$ num
//最隨機的紅包是什麽?價值
公共$ minMoney
//最隨機的紅包是什麽?價值
公共$ maxMoney
//修復數據?公式:NO_LEFT:紅包總額=預算總額;CAN_LEFT:紅包總額
//預算盈余?額
public $ leftMoney
public function _ _ construct($ option = null)
{
if($ option instance of options to)
{
$ this-& gt;setOption($ option);
}
}
公共函數setOption(optionadto $ option){
$ this-& gt;total money = $ option-& gt;貨幣總額;
$ this-& gt;num = $ option-& gt;num
$ this-& gt;format type = $ option-& gt;randFormatType$ this-& gt;min money = $ option-& gt;rangeStart
$ this-& gt;maxMoney = $ option-& gt;rangeEnd
$ this-& gt;left money = $ this-& gt;貨幣總額;
}
/**
*創建隨機紅包
*
* @訪問公共
* @返回void
*/
公共函數create()
{
$ data = array();
if(false = = $ this-& gt;isCanBuilder())
{
返回$ data
}
$ left money = $ this-& gt;leftMoney
for($ I = 1;$ i & lt= $ this-& gt;num$i++)
{
$ data[$ I]= $ this-& gt;外匯(美元);
$ left money = $ left money-$ data[$ I];
}
//修復數據
list($okLeftMoney,$ ok data)= $ this-& gt;格式($leftMoney,$ data);
//隨機排序
shuffle($ ok data);
$ this-& gt;leftMoney = $ okLeftMoney
返回$ okData
}
/**
*可以隨機發紅包嗎?
* @訪問公共
* @返回void
*/
公共函數isCanBuilder()
{
if(false = = is _ int($this-& gt;num)| | $ this-& gt;num & lt= 0)
{
返回false
}
if(false = = is _ numeric($this-& gt;total money)| | $ this-& gt;totalMoney <= 0) {
返回false
}
//平均值
$ avg money = $ this-& gt;total money/1.0/$ this-& gt;num
//卑鄙?大多數?價值
if($ avg money & lt;$ this-& gt;minMoney)
{
返回false
}
返回true
}
/**
*拿到剩下的?額
* @訪問公共
公共函數getLeftMoney()
{
return $ this-& gt;leftMoney
}
/**
*隨機紅包?變成壹個函數。三個?功能。[(1,0.01),($num/2,$avgMoney),($num,0.01)] * @param mixed $x,1 & lt;= $ x & lt= $ this-& gt;num
* @訪問公共
* @返回void
*/
公共函數fx($x)
{
if(false = = $ this-& gt;isCanBuilder())
{
返回0;
}
if($ x & lt;1 | | $ x & gt;$ this-& gt;數字)
{
返回0;
}
$ x 1 = 1;
$ y 1 = $ this-& gt;米莫尼;
//中間點
$ x2 = ceil($ this-& gt;num/1.0/2);
//我的巔峰
$ y2 = $ this-& gt;maxMoney
//最後壹點
$ x3 = $ this-& gt;num
$ y3 = $ this-& gt;米莫尼;
//當X1時,X2和X3都是1(豎線)
if($ x 1 = = $ x2 & amp;& amp$x2 == $x3)
{
//'/_ \ '三個?線形?旅行
//'/'部分
if($x1!= $ x2 & amp& amp$ x & gt= $ x 1 & amp;& amp$ x & lt= $x2)
{
、y = 1.0 *(x-$ x 1)/($ x2-$ x 1)*($ y2-$ y 1)+$ y 1;返回number_format($y,2,'.', '');
}
//'\ '形狀
if($x2!= $ x3 & amp& amp$ x & gt= $ x2 & amp& amp$ x & lt= $x3)
{
$ y = 1.0 *(x-$ x2)/($ x3-$ x2)*($ y3-$ y2)+$ y2;返回number_format($y,2,'.', '');
}
返回0;
}
/**
*格式修復紅包數據
*
* @param mixed $leftMoney
* @param數組$數據
* @訪問公共
* @返回void
*/
私有函數格式($leftMoney,array $data)
{
//不能隨便發紅包。
if(false = = $ this-& gt;isCanBuilder())
{
返回數組($leftMoney,$ data);
}
//剩余紅包為0。
if(0 == $leftMoney) //?需要維修數據
返回數組($leftMoney,$ data);
}
//數組為空
if(count($ data)& lt;1)
{
返回數組($leftMoney,$ data);
}
//如果有盈余,而$ left money >;0
if(' Can _ Left ' = = $ this-& gt;格式類型
& amp& amp$ leftMoney & gt0)
{
返回數組($leftMoney,$ data);
}
//如果還有剩余的錢,試著加到?紅包?不會加就試試?a . while($left money & gt;0)
{
$ found = 0;
foreach($ data as $ key = & gt;$val)
{
//減少循環優化
if($ left money & lt;= 0)
{
打破;
}
//預判
$ afterLeftMoney =(double)$ left money-0.01;
$ after val =(double)$ val+0.01;
if($ afterLeftMoney & gt;= 0 & amp& amp$ afterVal & lt= $ this-& gt;maxMoney)
{
$ found = 1;
$ data[$ key]= number _ format($ after val,2,'.','');
$ leftMoney = $ afterLeftMoney
//精確度
}
}
//如果沒有紅包要加,就需要加完,否則無限循環結束。
//也就是說,每個紅包都不會有錢。比如紅包已經是最多的了?價值。這時候分的時候壹定要給個手勢。無限循環。if($found == 0)
{
打破;
}
}
//If $ leftmoney
while($left money & lt;0)
{
$ found = 0;
foreach($ data as $ key = & gt;$val)
{
if($ left money & gt;= 0)
{
打破;
}
//預判
$ afterLeftMoney =(double)$ left money+0.01;
$ after val =(double)$ val-0.01;
if($ afterLeftMoney & lt;= 0 & amp& amp$ afterVal & gt= $ this-& gt;minMoney)
{
$ found = 1;
$ data[$ key]= number _ format($ after val,2,'.','');
$ leftMoney = $ afterLeftMoney
$ left money = number _ format($ left money,2,'.','');
}
}
//如果?如果沒有減下來的紅包,就需要結束,否則就是死循環。
if($found == 0)
{
}
}
返回數組($leftMoney,$ data);
}
}
//維護策略的環境類。
類RedPackageBuilder
{
//示例
受保護的靜態$ _ instance = null
/**
*單壹實例(獲得的實例)
*
* @return MemcacheOperate
*/
公共靜態函數getInstance()
{
if (null === self::$_instance)
{
self::$ _ instance = new self();
}
返回self::$ _ instance;
}
/**
*制定戰略?顯示
*
* @param string $type類型
* @返回void
*/
公共函數getBuilderStrategy($type) {
$class = $type。“打包策略”;
if(class_exists($class))
返回新的$ class();
}
其他
{
Thrownnewexception ("{$ class}類不存在!");
}
}
公共函數getRedPackageByDTO(optionadto $ option dto)
{
//獲取策略
$ builder strategy = $ this-& gt;getBuilderStrategy($ options to-& gt;builder strategy);//設置參數
$ builder strategy-& gt;setOption($ option dto);
return $ builder strategy-& gt;create();
}
}
類別客戶端
{
公共靜態函數main($argv)
{
//固定紅包
$ dto = option dto::create(1000,10,100,100,'等於');
$ data = RedPackageBuilder::getInstance()-& gt;getRedPackageByDTO($ dto);
//print _ r($ data);
//隨機紅包[修復數據]
$dto = OptionDTO::create(5,10,0.01,0.99,' rand triangle ');
$ data = RedPackageBuilder::getInstance()-& gt;getRedPackageByDTO($ dto);print _ r($ data);
//隨機紅包[無數據修復]
$dto = OptionDTO::create(5,10,0.01,0.99,' RandTriangle ',' Can _ Left ');
$ data = RedPackageBuilder::getInstance()-& gt;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;;(平均值* 2 - 0.01 = 0.99))
第1頁
2需求分析
2.1固定紅包
如果是固定紅包,算法是什麽?直線。t是固定紅包的金額。如圖所示。
f(x)= t;(1 & lt;= x & lt=數字)
image.png
2.2隨機紅包
如果我們做?隨機函數rand。蘭特(0.01,0.99);所以10次隨機,如果最壞的情況是全部?金額0.99,合計?呃9.9元。會超過5元。?數額也會不正常分配。終於想到了?借助和數學函數,可以當隨機紅包用嗎?設備,好嗎?拋物線,三?功能。最後我選了等腰三?線性函數。
第2頁
1算法原理
如果需要發紅包,總是?金額總計為Money,紅包數量為num。額頭的範圍是【最小,最大】,線性?程如圖所示。
image.png
三個點的坐標:
(x1,y1) = (1,min)
(x2,y2) =(數量/2,最大值)
(x3,y3) =(數字,最小值)
確定性線性?程:
$ y = 1.0 *(x-$ x 1)/($ x2-$ x 1)*($ y2-$ y 1)+$ y 1;(x 1 & lt;= x & lt= x2)
第3頁
$ y = 1.0 *(x-$ x2)/($ x3-$ x2)*($ y3-$ y2)+$ y2;(x2 & lt= x & lt= x3)
維修數據:
y(合計)= y1+y2+y3 +......ynum;
y(組合)可能> TotalMoney,解釋?變成?如果數量太多,需要修改數據,則從(y1,y2,y3...ynum)乘以0.01。直到y(合計)= totalMoney。
y(壹起)可能< TotalMoney,解釋?變成?如果數量很少並且數據需要修改,則從(y1,y2,y3)中添加0.01...ynum)每次。直到y(合計)= totalMoney。
第4頁
2算法原理示例
如果需要發紅包,總是?金額11470,紅包數量7400。金額的範圍是[0.01,3.09],線性?程如圖所示。
image.png
3需求設計
3.1類圖設計
image.png
3.2源代碼設計
/**
*隨機紅包+固定紅包算法【策略模式】
第5頁
*/
//配置傳輸數據的DTO
類別選項
{
//紅包?額
公共資金總額;
//紅包數量
公共$ num
//範圍開始
public $ rangeStart
第6頁
//範圍結算
public $ rangeEnd
//?紅包策略
public $ builderStrategy
//隨機紅包剩余規則
public $ randFormatType//Can_Left:數據可以不修復就留下;No_Left:不能有公共靜態函數create ($ totalmoney,$ num,$ rangestart,$ rangeend,$ builder strategy,$ rand format =' no _ left ')。
第7頁
{
$self =新的自己();
$ self->;num = $ num
$ self->;rangeStart = $ rangeStart
$ self->;rangeEnd = $ rangEnd
$ self->;totalMoney = $ totalMoney
$ self->;builder strategy = $ builder strategy;
$ self->;randFormatType = $ randFormatType;
返回$ self
展開全文?
在應用程序中免費閱讀全文
去圖書館APP簽到讀卡,免費讀取微信紅包隨機數...
限制性豁免
導向長度圖
傳輸到網絡磁盤
發送到微信
下載文檔
北京百度網訊科技有限公司。8.0.70隱私政策權限描述
版權說明:本文檔由用戶提供並上傳,收入歸內容提供者專有。內容如有侵權,請舉報或索賠。
第8頁
為妳隨機抽取微信紅包號碼...964個成員文檔。
微信紅包隨機金額生成算法的仿真與應用
2537人閱讀
微信紅包隨機金額生成算法的仿真與應用
1455人閱讀
微信紅包的金額真的是隨機分配的嗎?
2391人閱讀
微信紅包算法的分析與實現
2508人閱讀
拿到所有的文件。4326人在看
根據妳的瀏覽,為妳整理壹個資料集。
微信紅包隨機數_微信紅包隨機數詳細解釋及算法代碼
文件夾
微信紅包規律分析——百度文庫
3.6分
2906閱讀
受歡迎和寫得好
如何猜壹個五塊五袋的紅包的尾數——百度文庫
4.4分
1082讀數
微信紅包隨機金額生成算法的仿真與應用——百度文庫
4.0分
1491讀數
最近下載量猛增。
剩余10個選定的文檔
去APP壹鍵獲取所有收藏。
相關文件
微信紅包隨機金額生成算法的仿真與應用
免費獲取全文
微信紅包隨機金額生成算法的仿真與應用
免費獲取全文
微信紅包的金額真的是隨機分配的嗎?
免費獲取全文
微信紅包算法的分析與實現
免費獲取全文
微信紅包數字意義大全課件。文件
已經有2567人看過了
行業好評
微機原理及應用微機系統試題庫及答案(可編輯)
2060人讀過
百裏挑壹
計算機網絡系統招標(技術部分)
1569人看過
網絡安全設備-網關[整理版]
1108人看過
用ASP導出Excel數據的四種方法
2213人看過
學校開展網絡安全教育活動的方案
1822人看過
第三篇綜合應用綜合案例第五篇計算機網絡應用綜合案例
已經有2470人看過了
CPU管腳斷了怎麽焊?
1218人看過
數據結構序列表的查找、插入和刪除
1594人看過
網絡安全建設實施方案
1331人看過
網絡安全檢查自查表
1489人看過
閱讀更多
推薦的文檔集