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

作者: pig030 (FEBUR.PHEIX)   2015-12-10 20:25:08
在下想知道買自己的幸運號,有沒有機會中大獎,於是寫了個
簡單的評估程式如下:
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
作者: alfadick (悟道修行者)   2015-12-11 22:34:00
好多For, Mathematica裡不推薦這種寫法吧~~這是習慣C/C++等過程式語言的人學MMA容易遺留下來的習慣多用Mathematica的函數式編程風格寫法啦~~

Links booklink

Contact Us: admin [ a t ] ucptt.com