[心得] 简单的乐秀评估程式 (有重复号码问题)

楼主: 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