iT邦幫忙

0

亂數抽獎,但獎項要完全送出

匿名 2015-03-10 16:21:383996 瀏覽

想請問各位,

我做了一個小抽獎,
假設我有20個項目提供一天內抽獎
一獎1個 二獎3個 三獎3 四獎3個 五獎10個
我用了$r=rand(1,100)
假設$r=6時,會抽到第五獎
$r=13時 抽到四獎
$r=23時 抽到三獎
$r=37時抽到二獎
$r=69時抽到一獎
抽到獎項時同時我也會更新進去資料庫給個值說明他已經抽過 不能再抽到這個項目
也設定了 全部抽完後 顯示未抽中

但,反過來想的是 要是這天沒送完呢?
要怎樣才能避免沒送完的狀態呢?

0
外獅佬
iT邦大師 1 級 ‧ 2015-03-10 16:55:41

要怎樣才能避免沒送完的狀態呢?

抽獎的次數少於20次就會發生
這不關程式的問題,該是人為去控制的吧!

如果抽獎次數大於20,仍有機率發生送不完的情況。
這就得看抽獎機制的安排了
當場抽獎,發生機率高;
事後抽獎,用程式去把所有獎項塞完。

總裁 iT邦好手 1 級 ‧ 2015-03-10 17:01:33 檢舉

何必這麼麻煩呢,沒抽完的獎通通算我的不就結了...毆飛

外獅佬 iT邦大師 1 級 ‧ 2015-03-10 17:21:21 檢舉

奉總裁指示....結案,獎品不用抽了,全部搬到總裁家毆飛

0
newkevin
iT邦高手 1 級 ‧ 2015-03-10 21:20:51

這樣的概念 可行嗎
Z=抽獎次數

$r=rand(1,100)

A=1 B=3 C=3 D=3 E=10

A=1 R=69 A=A-1 輸出 A已抽中

B=3 R= 37 .36 .35 B=B-1 輸出二獎抽中 二獎還勝B個

C=3 R= 23 .24 .25 C=C-1 輸出叁獎抽中 三獎還勝C個

D=3 R= 13 .14 .15 D=D-1 輸出四獎抽中 四獎還勝D個

E=10 R= 0 .1 .2.3.4.5.6.7.8.9 e=e-1 輸出五獎抽中 五獎還勝e個

R=其他數字 秀出未中獎 或自行在跑到中獎

Z=Z-1 輸出 1-5 獎 A-Z個

Z=0 查詢 A+B+C+D+E =Y

Z=Z+Y =0跳出迴圈 或可手動停止

16
wiseguy
iT邦超人 1 級 ‧ 2015-03-10 21:21:44

你的需求只需要兩行程式。由 rand(1,100) 假設你的樣本群是 100 個人,也就是編號 1~100。

  1. 設一個陣列,內容放 1~100。

    <pre class="c" name="code">$a = range(1, 100);

  2. 把陣列亂數排序。

    <pre class="c" name="code">shuffle($a);

  3. $a[0]的號碼就是一獎、$a[1], $a[2], $a[3]的號碼就是二獎、以此類推,從頭開始抓你要給獎的人數。這種方法既是亂數抽獎,也不可能沒送完 (除非獎比人多)。

超精簡, 我只想到撲克牌發牌的方式哭

halawing iT邦新手 2 級 ‧ 2015-03-12 09:29:30 檢舉

這個方法好像會有機會出現同一個人拿多個獎項?

wiseguy iT邦超人 1 級 ‧ 2015-03-12 12:04:52 檢舉

halawing提到:
好像會有機會出現同一個人拿多個獎項

好像嗎?1~100的陣列,亂數排序後會出現重覆數字?除非你程式寫錯了吧。
直接給你明確答案:不可能。

我要發表回答

立即登入回答