導航:首頁 > 源碼編譯 > 抽獎概率演算法php

抽獎概率演算法php

發布時間:2023-07-04 13:51:13

php一個抽獎函數(自定義中獎項數和概率)

解決思路如下:
1)以數字區段來對應中獎情況例如有一、二、三等獎,各自的中獎概率分別為10%、20%、30%那麼有如下劃分:1-10,一等獎;11-30,二等獎;31-60,三等獎,60以上,未中獎

2)產生一個1~100之間的隨機數,看隨機數屬於哪個獎項區域,以確定中獎情況

㈡ php取隨機數概率演算法

問題有點模糊,我先暫時把「保留兩位小數」理解成「[輸出的隨機數]保留兩位小數」,而非其他因素保留多少小數。
又把「1-10」,理解成包括1和10在內其兩數之間的小數,
把10-50,理解成10.01到50.00之間的數,不包括10.00。以此類推。

<?php
functiongenRandom(){
$p=rand(1,100);
if($p<=60)$r=rand(100,1000);
elseif($p>60and$p<=85)$r=rand(1001,5000);
elseif($p>85and$p<=95)$r=rand(5001,10000);
else$r=rand(10001,20000);
return$r/100;
}
$a=array();
$total=50000;
for($i=0;$i<$total;$i++){
$c=genRandom();
if($c>=1and$c<=10)$p=0;
elseif($c>10and$c<=50)$p=1;
elseif($c>50and$c<=100)$p=2;
elseif($c>100and$c<=200)$p=3;
else$p=4;
if(!array_key_exists($p,$a))$a[$p]=1;
else$a[$p]++;
}
if(!array_key_exists(4,$a))$a[4]=0;
echo"總樣本數".$total.'<br/>';
echo"1-10樣本數".$a[0].',占'.($a[0]/$total*100).'%<br/>';
echo">10-50樣本數".$a[1].',占'.($a[1]/$total*100).'%<br/>';
echo">50-100樣本數".$a[2].',占'.($a[2]/$total*100).'%<br/>';
echo">100-200樣本數".$a[3].',占'.($a[3]/$total*100).'%<br/>';
echo"其他樣本數".$a[4].',占'.($a[4]/$total*100).'%<br/>';
總樣本數50000
1-10樣本數30052,佔60.104%
>10-50樣本數12404,佔24.808%
>50-100樣本數4993,佔9.986%
>100-200樣本數2551,佔5.102%
其他樣本數0,佔0%

㈢ 抽獎獎品概率的演算法謝謝了,大神幫忙啊

可以預定義一個數,然後根據百分比計算各自的門檻值。如下: (注意:概率需要從小到大排列,因為用if判斷的問題。) #define BASE_NUMBER 32767 #define BASE_DIV 100 #define RATE1 1 #define RATE2 5 #define RATE3 20 #define RATE4 74 int var1, var2, var3, var4; main() { var1 = (int)((float)BASE_NUMBER*RATE1/BASE_DIV); var2 = (int)((float)BASE_NUMBER*RATE2/BASE_DIV); var3 = (int)((float)BASE_NUMBER*RATE3/BASE_DIV); var4 = (int)((float)BASE_NUMBER*RATE4/BASE_DIV); ..... if ( rand <= var1 ) { // 第一種 } else if ( rand <= var2 ) { // 第二種 } else if ( rand <= var3 ) { // 第三種 } else { // 第四種 } ... } 如上,只需要改變BASE_DIV 和RATE1 2 3 4就能控制

求採納

㈣ 有哪些經典的抽獎演算法

常見的有兩種

第一類是常見的有等級的抽獎活動,如一等、二等、三等獎等等

java">//分別為一、二、三、四等將的獎品數量,最後一個為未中獎的數量。
privatestaticfinalInteger[]lotteryList={5,10,20,40,100};

privateintgetSum(){
intsum=0;
for(intv:lotteryList){
sum+=v;
}
returnsum;
}

privateintgetLotteryLevel(){
Randomrandom=newRandom(System.nanoTime());
intsum=getSum();
for(inti=0;i<lotteryList.length;++i){
intrandNum=Math.abs(random.nextInt())%sum;
if(randNum<=lotteryList[i]){
returni;
}else{
sum-=lotteryList[i];
}
}
return-1;
}

第二類是不分等級的抽獎活動,僅需要參與人數與獎品總數,各獎品中獎概率相等。

//另一種抽獎演算法,用於公司抽獎,即總參與人數與獎品數固定。
=75;
privatestaticfinalinttotal=175;
privatestaticSet<Integer>lotterySet=newHashSet<Integer>();
static{
for(inti=1;i<=lotteryNum;++i){
lotterySet.add(total*i/lotteryNum);
}
}
privateintgetLotteryNum2(){
Randomrand=newRandom(System.nanoTime());
intrandNum=Math.abs(rand.nextInt())%total;
if(lotterySet.contains(randNum)){
returnrandNum*lotteryNum/total;
}
return-1;
}

㈤ PHP金額越高中獎率越大,如何實現

你可以把輸入的比率都轉換成n/10000
然後按n來抽獎
比如1等獎1/1000 即 10/10000
2等獎 30/10000
3等獎 200/10000
4等獎3000/10000
那麼10+30+200+3000=3240;
取隨機數 r.Next(1,10001)
當0<r<=10 則為1等獎
當 10<r<=10+30 則中2等獎
當 10+30<r<=10+30+200 則中3等獎依次

根據金額判斷他的概率

㈥ php大轉盤的獲獎概率是怎麼算的

php中獎概率演算法,可用於刮刮卡,大轉盤等抽獎演算法。用法很簡單,代碼里有詳細注釋說明,一看就懂

$proCur) {

$randNum = mt_rand(1, $proSum);

if ($randNum <= $proCur) {

$result = $key;

break;

} else {

$proSum -= $proCur;

}

}

unset ($proArr);

return $result;

}

/*

* 獎項數組

* 是一個二維數組,記錄了所有本次抽獎的獎項信息,

* 其中id表示中獎等級,prize表示獎品,v表示中獎概率。

* 注意其中的v必須為整數,你可以將對應的 獎項的v設置成0,即意味著該獎項抽中的幾率是0,

* 數組中v的總和(基數),基數越大越能體現概率的准確性。

* 本例中v的總和為100,那麼平板電腦對應的 中獎概率就是1%,

* 如果v的總和是10000,那中獎概率就是萬分之一了。

*

*/

$prize_arr = array(

'0' => array('id'=>1,'prize'=>'平板電腦','v'=>1),

'1' => array('id'=>2,'prize'=>'數碼相機','v'=>5),

'2' => array('id'=>3,'prize'=>'音箱設備','v'=>10),

'3' => array('id'=>4,'prize'=>'4G優盤','v'=>12),

'4' => array('id'=>5,'prize'=>'10Q幣','v'=>22),

'5' => array('id'=>6,'prize'=>'下次沒准就能中哦','v'=>50),

);

/*

* 每次前端頁面的請求,PHP循環獎項設置數組,

* 通過概率計算函數get_rand獲取抽中的獎項id。

* 將中獎獎品保存在數組$res['yes']中,

* 而剩下的未中獎的信息保存在$res['no']中,

* 最後輸出json個數數據給前端頁面。

*/

foreach ($prize_arr as $key => $val) {

$arr[$val['id']] = $val['v'];

}

$rid = get_rand($arr); //根據概率獲取獎項id

$res['yes'] = $prize_arr[$rid-1]['prize']; //中獎項

unset($prize_arr[$rid-1]); //將中獎項從數組中剔除,剩下未中獎項

shuffle($prize_arr); //打亂數組順序

for($i=0;$i

㈦ (概率問題)抽獎的概率計算是什麼

(概率問題)抽獎的概率計算(1-1/3)*1*1/1=2/3。

如果是連續抽到1-3個的,而且是不放回抽,則:

(一個)=5/205=1/41。

(二個)=5/205*(4/204)=1/41*(1/51)=1/2091。

(三個)=5/205*(4/204)*(3/203)=1/141491。

因為只有2種選擇,換或是不換。假設選換,第一次就抽中的概率是1/3,那麼選換後就成了不中;抽不中的是2/3,選擇換就是中;於是相當於選換中獎率2/3;如果選不換,同理得到中獎率是1/3。

概率

是度量偶然事件發生可能性的數值。假如經過多次重復試驗(用X代表),偶然事件(用A代表)出現了若干次(用Y代表)。以X作分母,Y作分子,形成了數值(用P代表)。在多次試驗中,P相對穩定在某一數值上,P就稱為A出現的概率。如偶然事件的概率是通過長期觀察或大量重復試驗來確定,則這種概率為統計概率或經驗概率。

㈧ php實現可以設置中獎概率的抽獎程序代碼分享

這篇文章主要介紹了一個抽獎程序,要求一等獎的中獎概率是0.12%,二等獎中獎概率是3%,三等獎中獎概率是12%,其他中獎概率是都是謝謝惠顧
代碼如下:
<?php
/**
*
抽獎
*
@param
int
$total
*/
function
getReward($total=1000)
{
$win1
=
floor((0.12*$total)/100);
$win2
=
floor((3*$total)/100);
$win3
=
floor((12*$total)/100);
$other
=
$total-$win1-$win2-$win3;
$return
=
array();
for
($i=0;$i<$win1;$i++)
{

$return[]
=
1;
}
for
($j=0;$j<$win2;$j++)
{

$return[]
=
2;
}
for
($m=0;$m<$win3;$m++)
{

$return[]
=
3;
}
for
($n=0;$n<$other;$n++)
{

$return[]
=
'謝謝惠顧';
}
shuffle($return);
return
$return[array_rand($return)];
}

$data
=
getReward();
echo
$data;
?>

㈨ php取隨機數概率演算法

//首先定義概率數組
$Probability["1-10"]=0.6;
$Probability["11-50"]=0.25;
$Probability["51-100"]=0.10;
$Probability["101-200"]=0.05;
//擴大1000倍便於計算
foreach($Probabilityas$k=>$v){
$Probability[$k]=$v*1000;
}

$Num=0;
$Random=rand(1,1000);//生成隨機數
foreach($Probabilityas$k=>$v){
if($Num<$Random&&$Random<=$v+$Num){
//進入這里表示隨機數在哪一個范圍內
$Range=explode("-",$k);
//生成范圍區間的隨機數
$Result=rand($Range[0],$Range[1]);
echo$Result;
break;
}else{
$Num+=$v;
}
}

閱讀全文

與抽獎概率演算法php相關的資料

熱點內容
沒有解壓縮軟體的時候怎麼解壓 瀏覽:324
成都35歲還能學習程序員嗎 瀏覽:636
廣東聯通伺服器地址 瀏覽:702
zk如何看注冊了哪些伺服器 瀏覽:930
紅塔村鎮銀行app在哪裡下載 瀏覽:245
python中divmod 瀏覽:19
貓眼雲視頻連接伺服器失敗 瀏覽:211
舊版安卓手機太卡怎麼辦 瀏覽:998
為什麼在電腦上解壓的游戲玩不了 瀏覽:755
matlab演算法哪裡找 瀏覽:146
python數組的中序遍歷 瀏覽:769
程序員整那麼多錢為看病 瀏覽:856
結構方程模型的python 瀏覽:285
抖快推app在哪裡下載 瀏覽:76
androidcheckbox默認選中 瀏覽:587
安卓上怎麼玩地平線 瀏覽:404
python自製錄屏軟體 瀏覽:571
熱電偶與單片機 瀏覽:307
葉子java版命令方塊 瀏覽:837
阿里伺服器有什麼作用 瀏覽:749