[心得] 簡單的樂秀評估程式 (有重覆號碼問題)

看板Mathematica作者 (FEBUR.PHEIX)時間9年前 (2015/12/10 20:25), 9年前編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/1
在下想知道買自己的幸運號,有沒有機會中大獎,於是寫了個 簡單的評估程式如下: 1 A = IntegerPart[Table[1 + Random[]*48, {x, 1, 6, 1}]]; 2 s = {1, 2, 3, 4, 5, 6}; 3 NN = {}; 4 k = 0; 5 For[q = 1, q <= 10000, q++, 6 For[j = 1, j <= 6, j++, 7 For[i = 1, i <= 6, i++, 8 If[s[[i]] == A[[j]], k++]; 9 ] 10 ]; 11 NN = Append[NN, k]; k = 0; 12 A = IntegerPart[Table[1 + Random[]*48, {x, 1, 6, 1}]]; 13 ]; 14 {Count[NN, 1], Count[NN, 2], Count[NN, 3], Count[NN, 4], Count[NN, 5], 15 Count[NN, 6]}/10000 第1行是為了產生6個,1-49號的隨機整數樂透號碼。(目前無法避免重覆,看大家有 什麼修改的好意見。 第2行是你想要模擬的自己的幸運號碼。 第3行是創造一個叫NN的List,待會要拿來統計中多少次1碼,多少次2碼...多少次6碼。 第4行k是用來統計每一次中多少碼,起始值是0。 第5行到第13行的包覆迴圈是用來模擬開獎6/49的樂透10000次。 第6行到第10行包覆的迴圈是用來判斷中多少碼,統計之後用k輸出。 第7到第9是判斷每一次的中獎號碼有幾號。 第8行是判斷你輸入的中獎號碼是否有中,在第i個位置與第j個位置如果號碼相同, 則對k加1。表示你中1號。 第11行則是把每一期中獎多少碼,附加在NN的list最後面。例如: NN={1,4,2,1,...,10} 表示第1期中1號,第2期中4號,第3期中2號,第4期中1號.. 第12行則是每一期開獎結束後,準備開下一期的隨機6位號碼。 第14行則是計算10000期中,中1號累計幾次,中2號累計幾次...,中6號累計幾次。 最後除上10000次,就是你的中獎率。 上述模擬沒辦法排除重覆號碼出現的問題,還需要修改。 模擬出來結果如下: {383/1000, 1391/10000, 131/5000, 3/1000, 1/10000, 0} 不建議用十萬期,速度會變超慢。以上大家可以修改更棒,例如加入計算獎金分紅。 還有你的幸運號碼可以賺多少錢。 文章網址: https://www.ptt.cc/bbs/Mathematica/M.1449750315.A.2C3.html ※ 編輯: pig030 (140.109.122.86), 12/10/2015 20:25:52 ※ 編輯: pig030 (140.109.122.86), 12/10/2015 20:27:15

12/11 22:34, , 1F
好多For, Mathematica裡不推薦這種寫法吧~~
12/11 22:34, 1F

12/11 22:34, , 2F
這是習慣C/C++等過程式語言的人學MMA容易遺留下來的習慣
12/11 22:34, 2F

12/11 22:36, , 3F
多用Mathematica的函數式編程風格寫法啦~~
12/11 22:36, 3F
文章代碼(AID): #1MQMyhB3 (Mathematica)
文章代碼(AID): #1MQMyhB3 (Mathematica)