2011年2月13日 星期日

聰明包牌法

昨天報紙上有一則新聞標題「衰男包牌 16張號碼竟相同」。什麼人這麼衰?令人好奇。

新聞內容寫道:「彩券行人員告訴他有電腦選號的聰明包牌法,只要9注,1至49個數字都會出現。」這應該是基本算術。大樂透每注可選6個號碼,9注總共可選54號碼,當然可以讓1至49個數字都出現。只是每注要選哪六個號碼,是可以讓電腦程式代勞一下。

「於是他花7650元買了153注共34張彩券,當時沒看就收起來,不料第二天兌獎時,發現其中16張、每張5注的號碼都是同樣5組號碼,另16張、每張4注的號碼也是一樣情形,而且全數摃龜。」

如果將每9注包含所有1至49數字的選號視為一組,這位仁兄顯然買了153/9 = 17 組,這17組中竟然有16組的號碼組合是一模一樣的,難怪他要不滿。

到底程式出了甚麼問題?上面17組中有兩種組合,顯然這個程式不會笨到每次都輸出一樣的結果。有沒有可能是彩券行老闆的操作失誤,輸出第一組後嫌累,直接輸出第二組x16,就像印表機列印16份那樣。

另外包牌程式有沒有記憶?我是說它是否記得之前輸出的選號組,以避免同一個客人拿到相同的選號組合?看起來沒有,很多人寫這種程式純粹以亂數打發,認為出現相同的選號組合的機率很小。這是沒錯,但要注意亂數種子的初值化。相同的種子一定跑出相同的結果。

最後,這種包牌程式最適合作為程式練習題。比如說,讓使用者輸入9組號碼,產生這9組號碼中任意6組成為一注的所有組合。由於一般程式教學並不著重這種產生所有排列或組合的例子,所以一般程度的學生都會覺得這種題目有點難度。

沒有留言:

張貼留言