欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于PHP代碼實(shí)現(xiàn)中獎(jiǎng)概率算法可用于刮刮卡、大轉(zhuǎn)盤等抽獎(jiǎng)算法

 更新時(shí)間:2015年12月20日 09:38:22   作者:巖_生  
大轉(zhuǎn)盤中獎(jiǎng)概率算法在我們的日常生活中,經(jīng)常遇到,那么基于php代碼是如何實(shí)現(xiàn)中獎(jiǎng)概率算法的,下面通過一段代碼實(shí)例給大家介紹php中獎(jiǎng)概率算法

大轉(zhuǎn)盤中獎(jiǎng)概率算法在我們的日常生活中,經(jīng)常遇到,那么基于php代碼是如何實(shí)現(xiàn)中獎(jiǎng)概率算法的,下面通過一段代碼實(shí)例給大家介紹php中獎(jiǎng)概率算法,代碼簡單易懂,并且附有注釋,具體代碼如下所示:

<?php
/*
 * 經(jīng)典的概率算法,
 * $proArr是一個(gè)預(yù)先設(shè)置的數(shù)組,
 * 假設(shè)數(shù)組為:array(100,200,300,400),
 * 開始是從1,1000 這個(gè)概率范圍內(nèi)篩選第一個(gè)數(shù)是否在他的出現(xiàn)概率范圍之內(nèi), 
 * 如果不在,則將概率空間,也就是k的值減去剛剛的那個(gè)數(shù)字的概率空間,
 * 在本例當(dāng)中就是減去100,也就是說第二個(gè)數(shù)是在1,900這個(gè)范圍內(nèi)篩選的。
 * 這樣 篩選到最終,總會(huì)有一個(gè)數(shù)滿足要求。
 * 就相當(dāng)于去一個(gè)箱子里摸東西,
 * 第一個(gè)不是,第二個(gè)不是,第三個(gè)還不是,那最后一個(gè)一定是。
 * 這個(gè)算法簡單,而且效率非常 高,
 * 關(guān)鍵是這個(gè)算法已在我們以前的項(xiàng)目中有應(yīng)用,尤其是大數(shù)據(jù)量的項(xiàng)目中效率非常棒。
 */
function get_rand($proArr) { 
 $result = ''; 
 //概率數(shù)組的總概率精度 
 $proSum = array_sum($proArr); 
 //概率數(shù)組循環(huán) 
 foreach ($proArr as $key => $proCur) { 
  $randNum = mt_rand(1, $proSum); 
  if ($randNum <= $proCur) { 
   $result = $key; 
   break; 
  } else { 
   $proSum -= $proCur; 
  }   
 } 
 unset ($proArr); 
 return $result; 
} 
/*
 * 獎(jiǎng)項(xiàng)數(shù)組
 * 是一個(gè)二維數(shù)組,記錄了所有本次抽獎(jiǎng)的獎(jiǎng)項(xiàng)信息,
 * 其中id表示中獎(jiǎng)等級(jí),prize表示獎(jiǎng)品,v表示中獎(jiǎng)概率。
 * 注意其中的v必須為整數(shù),你可以將對(duì)應(yīng)的 獎(jiǎng)項(xiàng)的v設(shè)置成0,即意味著該獎(jiǎng)項(xiàng)抽中的幾率是0,
 * 數(shù)組中v的總和(基數(shù)),基數(shù)越大越能體現(xiàn)概率的準(zhǔn)確性。
 * 本例中v的總和為100,那么平板電腦對(duì)應(yīng)的 中獎(jiǎng)概率就是1%,
 * 如果v的總和是10000,那中獎(jiǎng)概率就是萬分之一了。
 * 
 */
$prize_arr = array( 
 '0' => array('id'=>1,'prize'=>'平板電腦','v'=>1), 
 '1' => array('id'=>2,'prize'=>'數(shù)碼相機(jī)','v'=>5), 
 '2' => array('id'=>3,'prize'=>'音箱設(shè)備','v'=>10), 
 '3' => array('id'=>4,'prize'=>'4G優(yōu)盤','v'=>12), 
 '4' => array('id'=>5,'prize'=>'10Q幣','v'=>22), 
 '5' => array('id'=>6,'prize'=>'下次沒準(zhǔn)就能中哦','v'=>50), 
); 
/*
 * 每次前端頁面的請(qǐng)求,PHP循環(huán)獎(jiǎng)項(xiàng)設(shè)置數(shù)組,
 * 通過概率計(jì)算函數(shù)get_rand獲取抽中的獎(jiǎng)項(xiàng)id。
 * 將中獎(jiǎng)獎(jiǎng)品保存在數(shù)組$res['yes']中,
 * 而剩下的未中獎(jiǎng)的信息保存在$res['no']中,
 * 最后輸出json個(gè)數(shù)數(shù)據(jù)給前端頁面。
 */
foreach ($prize_arr as $key => $val) { 
 $arr[$val['id']] = $val['v']; 
} 
$rid = get_rand($arr); //根據(jù)概率獲取獎(jiǎng)項(xiàng)id 
$res['yes'] = $prize_arr[$rid-1]['prize']; //中獎(jiǎng)項(xiàng) 
unset($prize_arr[$rid-1]); //將中獎(jiǎng)項(xiàng)從數(shù)組中剔除,剩下未中獎(jiǎng)項(xiàng) 
shuffle($prize_arr); //打亂數(shù)組順序 
for($i=0;$i<count($prize_arr);$i++){ 
 $pr[] = $prize_arr[$i]['prize']; 
} 
$res['no'] = $pr; 
print_r($res); 

下面再給大家分享一段實(shí)例代碼基于Java實(shí)現(xiàn)中獎(jiǎng)概率計(jì)算

 做移動(dòng)的項(xiàng)目,有個(gè)需求,做個(gè)搖獎(jiǎng)的活動(dòng)!其中中獎(jiǎng)的計(jì)算比較惡心,用戶要改動(dòng)各個(gè)獎(jiǎng)項(xiàng)的中獎(jiǎng)概率,而且每天的獎(jiǎng)項(xiàng)有個(gè)數(shù)限制。一二三四五六等獎(jiǎng),概率不通,怎么算一個(gè)用戶參與了中沒中將呢?苦思了一下,可以用Random類的 nextInt(int x)方法產(chǎn)生一個(gè)范圍內(nèi)的隨機(jī)數(shù),產(chǎn)生到那個(gè)區(qū)間就是幾等獎(jiǎng)了,中獎(jiǎng)區(qū)間的產(chǎn)生是動(dòng)態(tài)的。貼出源代碼,僅供參考!

package Mzone;
import java.util.ArrayList;
import java.util.Random;
public class Mzone {
 /**
 * CopyRright(c)2009-04: 
 * Project: 
 * Module ID: 
 * Comments: 概率計(jì)算
 * JDK version used: <JDK1.4>
 * Author:ch
 * Create Date:2009-04-20
 * Modified By: 
 * Modified Date: 
 * Why & What is modified 
 * Version: 1.0
 */ 
 static Random r = new Random();
 public static void main(String[] args) {
  //各個(gè)獎(jiǎng)項(xiàng)的中獎(jiǎng)概率的分母
  Integer _5m = new Integer(5);
  Integer _500m = new Integer(30);
  Integer _ipod = new Integer(500);
  Integer _phone = new Integer(1000);
  Integer _notebook = new Integer(1500);
  Integer _jay = new Integer(50);
  ArrayList list = new ArrayList();
  if(_5m.intValue()!=0)
   list.add(_5m);
  if(_500m.intValue()!=0)
   list.add(_500m);
  if(_ipod.intValue()!=0)
   list.add(_ipod);
  if(_phone.intValue()!=0)
   list.add(_phone);
  if(_notebook.intValue()!=0)
   list.add(_notebook);
  if(_jay.intValue()!=0)
   list.add(_jay);
  //計(jì)算最小公倍數(shù)
  int common = getN(list);
  System.out.println("最小公倍數(shù):"+common);
  int a = 0;int b = 0;int c = 0;int d = 0;int e = 0;int f = 0;int g = 0;
  int first = 0;int second = 0;int third = 0;int four = 0;int fifth = 0;int sixth = 0;
  if(_5m.intValue()!=0){
   first = common/_5m.intValue();
  }
  if(_500m.intValue()!=0){
   second = first + (common/_500m.intValue());
  }else second = first;
  if(_ipod.intValue()!=0){
   third = second + (common/_ipod.intValue());
  }else third = second;
  if(_phone.intValue()!=0){
   four = third + (common/_phone.intValue());
  }else four = third;
  if(_notebook.intValue()!=0){
   fifth = four + (common/_notebook.intValue());
  }else fifth = four;
  if(_jay.intValue()!=0){
   sixth = fifth + (common/_jay.intValue());
  }else sixth = fifth;
  int times = 30000;//循環(huán)次數(shù)
  for(int i = 0;i < times; i++){
   int ri = getRandom(common);//產(chǎn)生隨機(jī)數(shù)
   if(ri >= 0 && ri < first){
    a++;
   }else if(ri >= first && ri < second){
    b++;
   }else if(ri >= second && ri < third){
    c++;
   }else if(ri >= third && ri < four){
    d++;
   }else if(ri >= four && ri < fifth){
    e++;
   }else if(ri >= fifth && ri < sixth){
    f++;
   }else{
    g++;
   }
  }
  System.out.println("5m值:" + a + " 500m值:" + b + " ipodMP3:" + c + " 手機(jī):" + d + " 筆記本電腦:" + e + " 演唱會(huì)門票:" + f + " 謝謝參與:" + g);
 }
 /**
  * 求最大公約數(shù)
 */
 public static int gcd(int m, int n){
  while (true){
   if ((m = m % n) == 0)
   return n;
   if ((n = n % m) == 0)
   return m;
  }
 }
 /**
 * 求最小公倍數(shù)
 */
 public static int gys(int z, int y){
  int t = 0;
  int c = 0;
  c = gcd(z,y);
  t = z * y / c;
  return t;
 }
 /**
  * 求幾個(gè)數(shù)的最小公倍數(shù)
 */
 public static int getN(ArrayList list){
  int t = 1;
  for(int i = 0;i<list.size();i++){
   Integer temp = (Integer)list.get(i);
   t = gys(t,temp.intValue());
  }
  return t; 
 }
 /**
  * 產(chǎn)生隨機(jī)數(shù)
 */
 public static int getRandom(int y){
  int result = r.nextInt(y);
  return result;
 }
}

相關(guān)文章

  • php導(dǎo)入模塊文件分享

    php導(dǎo)入模塊文件分享

    本文給大家分享的是php導(dǎo)入模塊文件分享,主要參數(shù)有導(dǎo)入文件路徑字符串,可以用"."代替"/", 導(dǎo)入文件類型的擴(kuò)展名(帶"."號(hào)),也可以是class/inc(簡寫方式), 如果導(dǎo)入成功則返回true,否則返回異常對(duì)象,有需要的小伙伴參考下吧。
    2015-03-03
  • 基于PHP生成靜態(tài)頁的實(shí)現(xiàn)方法

    基于PHP生成靜態(tài)頁的實(shí)現(xiàn)方法

    本篇文章是對(duì)PHP生成靜態(tài)頁的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05
  • TP3.2.3框架文件上傳操作實(shí)例詳解

    TP3.2.3框架文件上傳操作實(shí)例詳解

    這篇文章主要介紹了TP3.2.3框架文件上傳操作,結(jié)合實(shí)例形式詳細(xì)分析了thinkPHP3.2.3框架文件上傳相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • php 的反射詳解及示例代碼

    php 的反射詳解及示例代碼

    本文主要介紹PHP的反射內(nèi)容的知識(shí),這里提供相關(guān)的資料講解,及簡單示例代碼供大家參考,有興趣的小伙伴可以參考下
    2016-08-08
  • 詳談PHP文件目錄基礎(chǔ)操作

    詳談PHP文件目錄基礎(chǔ)操作

    這篇文章主要詳細(xì)介紹了PHP文件目錄基礎(chǔ)操作,并附上大量的操作實(shí)例,非常的詳盡,有需要的朋友可以參考下
    2014-11-11
  • ThinkPHP5.1+Ajax實(shí)現(xiàn)的無刷新分頁功能示例

    ThinkPHP5.1+Ajax實(shí)現(xiàn)的無刷新分頁功能示例

    這篇文章主要介紹了ThinkPHP5.1+Ajax實(shí)現(xiàn)的無刷新分頁功能,結(jié)合實(shí)例形式詳細(xì)分析了ThinkPHP5.1+Ajax無刷新分頁具體原理、前臺(tái)數(shù)據(jù)發(fā)送與后臺(tái)處理相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • thinkphp諸多限制條件下如何getshell詳解

    thinkphp諸多限制條件下如何getshell詳解

    這篇文章主要給大家介紹了關(guān)于thinkphp諸多限制條件下如何getshell的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • destoon后臺(tái)網(wǎng)站設(shè)置變成空白的解決方法

    destoon后臺(tái)網(wǎng)站設(shè)置變成空白的解決方法

    這篇文章主要介紹了destoon后臺(tái)網(wǎng)站設(shè)置變成空白的解決方法,需要的朋友可以參考下
    2014-06-06
  • PHP寫微信公眾號(hào)文章頁采集方法

    PHP寫微信公眾號(hào)文章頁采集方法

    給大家分析一下如何用PHP寫出采集微信公眾號(hào)文章的方法以及代碼詳細(xì)講解,需要的朋友學(xué)習(xí)一下。
    2017-12-12
  • php自動(dòng)加載代碼實(shí)例詳解

    php自動(dòng)加載代碼實(shí)例詳解

    這篇文章主要介紹了php自動(dòng)加載代碼實(shí)例詳解,文中代碼講解的很清晰,有感興趣的同學(xué)可以研究下
    2021-02-02

最新評(píng)論