Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Lotterie-Algorithmus

PHP-Lotterie-Algorithmus

WBOY
WBOYOriginal
2016-10-10 11:56:251178Durchsuche

Haben die allmächtigen Götter bessere Lotteriealgorithmen?

Antwortinhalt:

Haben die allmächtigen Götter bessere Lotteriealgorithmen?

false zurückgeben

Das habe ich zuvor geschrieben. Im Internet werden zwei beliebte Algorithmen verwendet, und die Wahrscheinlichkeit ist zu hoch. Ich musste zurück zum Lehrbuch gehen und einfach alle Gewinnbälle und Interferenzbälle in den Korb legen und sie zufällig ziehen.
Und die Verlosung erfolgt direkt ohne Rücknahme. Wir müssen die Gewinne erst nach erneuter Verlosung auszahlen. Ist der Gewinn verlost, wird er direkt als Dankeschön für die Teilnahme ausgezahlt.

<code><?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
 
 
    public function index(){
            $prize=array(
                array('id'=>1,'name'=>'苹果电脑','chance'=>1),
                array('id'=>2,'name'=>'苹果手机','chance'=>2),
                array('id'=>3,'name'=>'1000元购物卡','chance'=>3),
                array('id'=>4,'name'=>'300元餐具','chance'=>4),
                array('id'=>5,'name'=>'100元手机充值卡','chance'=>5)
            );
            $prize_form[0]=array('id'=>0,'name'=>'谢谢参与!');
            foreach ($prize as $key => $value) {
                //格式化数组
                $prize_form[$value['id']]=$value;
                if($value['chance']>0){
                    $p[$value['id']]=$value['chance'];
 
                }
                
            }
 
            $result=$this->get_rand($p);
 
            echo $prize_form[$result]['name'];
    }
 
    /*
    *奖项的ID不得为0,0默认为谢谢参与
    *$proArr=array('1'=>'1','2'=>2)
    **/
    
    private function get_rand($proArr)
    {
        //奖项数量
        $prize_number=count($proArr);
        foreach ($proArr as $key => $value) {
            
            for($i=0;$i<$value;$i++){
                //生成得奖球
                $seekGroup[]='P'.$key;
 
            }
        }
      
        $chance_sum=array_sum($proArr);
        //干扰球数量
        $disturb_number=$prize_number*100-$chance_sum;
        //生成干扰球
        $disturb=range(1,$disturb_number);
        //将球放入篮子里
        $basket=array_merge($seekGroup,$disturb);
        shuffle($basket);
        //抽奖
        $rand=rand(0,$prize_number*100-1);
        if(strstr($basket[$rand], "P")){
            $result=str_replace('P', '', $basket[$rand]);
        }else{
            $result=0;
        }
 
        return $result;
    }
 
 
 
 
 
}
?></code>

Dieses Problem ist einfacher zu lösen. Angenommen, es gibt 100 Preise und 100 Personen, an die sie verteilt werden. Die 100 Preise sind mit Auszeichnung 0-99 nummeriert, und die 100 Personen, an die sie verteilt werden, sind mit Person0-99 nummeriert. Der Code ist wie folgt implementiert:

<code><?php
/**
 * 关注微信公众号:phpgod.
 * User: PHP技术大全
 * Date: 2016/10/9
 * Time: 9:47
 */
$list = range(0,99);
$awardList = $list;
$personList = $list;
shuffle($awardList);
shuffle($personList);

$targetAwardResult = array_combine($awardList,$personList);

var_export($targetAwardResult);</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn