看板 PHP 關於我們 聯絡資訊
: $i = 0; : while($i < 20) { : $tmp = array_rand($cardArray); : if(!in_array($tmp,$card2Array)) { : $card2Array[$i] = $tmp; : $i ++; : } : } 這邊有個問題是 抽第一張牌每張牌被抽到的機率是 1/52 抽第二張牌時每張牌被抽到的機率變成 1/51 ( 因為少一張 ) 抽第三張牌時每張被抽到的機率變成 1/50 ( 因為少兩張 ) .... 我的作法是建一個對照表 $Poker_map = array( "S1", "S2", ... , "S13", "H1", "H2", ... , "H13", "D1", "D2", ... , "D13", "C1", "C2", ... , "C13 ); 共 52 張牌 抽第一張牌時產生 0 ~ 51 的亂數值對應到 $Poker_map 對照表上 $num = rand( 0, 51 ); 假設抽到 15 好了, 15 對照到對照表是 H3 把抽到的牌加到已發出牌的陣列中 $deal_map[] = $Poker_map[ $num ]; 之後把抽到的牌從 $Poker_map 移除掉 移除的方法有很多種 需要注意的是移除後對照表的 key 要連續 這時候 $Poker_map 裡面剩下 51 張牌 接下來抽第二張牌時產生 0 ~ 50 的亂數值 之後依照前面的方法加到已發牌的陣列中並從 $Poker_map 裡移除 重複步驟直到發完牌 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.171.86
yuleen123:歐.. 其實 c 大的方法就可以了.. XD 05/15 01:43
cleanwind:只要能夠達成要求,運算少的情況下是沒差的 ^^ 05/15 01:46