확률 뽑기에 대한 php 코드 구현

확률 뽑기에 대한 php 코드 구현

더시민 1 1517 0

 

  • ~20의 숫자중에서 랜덤으로 1개숫자를 뽑는데요,
    1~5 는 2%확률로 나오고,
    6~10은 3%확률로 나오고,
    11~15는 5%,
    16~20은 90%.

    우선 1~100까지 숫자를 랜덤으로 뽑습니다.
    그 숫자가
    1~2
    2~5
    5~10
    10~100
    까지 범위로 구분해서
    1~5
    6~10
    11~15
    16~20
    의 숫자로 매칭

    이재 숫자들중 하나를 다시 랜덤으로 뽑으면 됩니다.

 

<?php
$l = 1000; // 반복 횟수
$p[4] = $p[3] = $p[2] = $p[1] = 0; // 범위 초기
for ($i=0;$i<$l;$i++)
{
$n = mt_rand($s=($e=($w=($r=mt_rand(1,100))<3 ?1:($r<6?2:($r<11?3:4)))*5)-4,$e);//★
$p[ceil($n/5)]++; // 범위 증가
}
echo '<xmp style="font-family:GulimChe;">';
for ($i=1;$i<5;$i++)
{
$s=($e=$i*5)-4;
printf("%02d ~ %02d : %02.2f %%\n",$s,$e,$p[$i]/$l);
}
echo '</xmp>';
?>

 

a 상품은 3 (다른것보다 3배로 잘나올 확률)

b 상품은 2 (다른 것보다 2배로 잘나올 확률)

a 상품은 1 (다른 보통것 확률)

d 상품은 1

e 상품은 3

f 상품은 2

g 상품은 1

h 상품은 2

이런 경우라고 하면은 

 

모든것의 총합은 a~h 까지의 숫자의 합인 15에서  

aaabbcdeeeffghh

여기에서 랜덤하게 뽑힌다고 생각하면 되니까

rand(1,15)에서 나온 숫자가 1~3이면 a , 4~5 b 이런 형태로 대응

근데 문제는 이게 1개가 아니라 여러갯수를 연달아 뽑는 확률임. 한번 뽑은건 다시 뽑을 수 없음.

 

뽑는 횟수를 x라고 하고

상품당 배율을 i라고 하면

x=1 일때 

 상품당 i번씩 배열에 담음

그리고 랜덤추첨

x=2일때 앞에 뽑은 상품을 제거한 배열에서

랜덤추첨

 

이런식으로 x=x일때까지 돌려주면 

총 x개일때 확률별로 나오게 될것같음

 


$randbox = array();
$res = array(
            array('a', 0),
            array('b', 1),
            array('c', 2),
            array('d', 3),
            array('e', 0),
            array('f', 0),
            array('g', 0),
            array('h', 0),
            array('i', 0),
            array('j', 0),
            array('k', 0),
            array('l', 3),
            array('m', 3)                                                                                                                                                
            );
//sum(as_extra) as sum , wr_id
for($i=0;$i<count($res);$i++){
    if($res[$i]['1'] == 0) $randbox[] = $res[$i]['0'];
    else {
        for($k=0;$k<$res[$i]['1'];$k++) {
            if($k==0 ) $u = $i;
            $randbox[] = $res[$u]['0'];
        }
    }
}
    print_r($randbox);
    echo $randbox[rand(1,count($randbox))]

1회차 추첨.

 

배열생성만 함수로 만듬

function random_box($res){
    for($i=0;$i<count($res);$i++){
        if($res[$i]['1'] == 0) $randbox[] = $res[$i]['0'];
        else {
            for($k=0;$k<$res[$i]['1'];$k++) {
                if($k==0 ) $u = $i;
                $randbox[] = $res[$u]['0'];
            }
        }
    }
    return $randbox;
}

 

1 Comments
더시민 2021.09.29 16:41  
$find_sca = explode('&sca=', $_SERVER["REQUEST_URI"]);
if($find_sca[1])  $find_sca1 = explode('&',$find_sca[1]);
if($find_sca1[0]) echo $sca = urldecode($find_sca1[0]);
if($sca) $wset['ca_list'] = $sca;
제목
Category
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand