作者leafwind (有葉玉米)
看板SD-GundamOL
標題Re: [血尿] 德天使
時間Sun Aug 1 21:45:36 2010
(補充:此篇原因為上一篇推文有人詢問
「如果每台機體機率均為1/6,那要多少抽才收集完四台天使?」
因此與現實狀況極可能有出入,因為A神龍與A死明顯機率較高)
我的機率真的不好..
結果還是寫程式讓他統計比較快= =
=====output=====
test if it is a fair dice in 600,000 tosses:
100173 99920 99318 100387 100345 99857
test start!
stop if number 1,2,3,4 have show up:
4 3 1 1 4 2 you have tossed 15 times.
stop if number 1,2,3,4 have show up:
4 4 1 3 1 3 you have tossed 16 times.
stop if number 1,2,3,4 have show up:
1 1 1 2 0 1 you have tossed 6 times.
stop if number 1,2,3,4 have show up:
1 1 3 3 3 4 you have tossed 15 times.
stop if number 1,2,3,4 have show up:
1 3 4 1 5 2 you have tossed 16 times.
stop if number 1,2,3,4 have show up:
1 1 1 3 3 6 you have tossed 15 times.
stop if number 1,2,3,4 have show up:
1 3 1 3 3 2 you have tossed 13 times.
stop if number 1,2,3,4 have show up:
2 1 3 2 2 1 you have tossed 11 times.
stop if number 1,2,3,4 have show up:
1 2 1 3 3 0 you have tossed 10 times.
stop if number 1,2,3,4 have show up:
1 5 4 1 1 3 you have tossed 15 times.
Acerage toss times need: 13
這是10次平均的結果
我也有改成測十萬次,結果平均是12次左右可以集滿四天使
因為版面有限就不貼上來了
有興趣又不怕傷眼的可以幫我找找哪裡寫錯..隨便亂搞的可能有寫錯:P
另外徵求機率魔人解答..為什麼期望值是12次..我不清楚XDDD
==========
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TEST_TIMES 100000
int main(void)
{
int i, j;
int count[6] = {0};
srand(time(NULL));
for(i = 0; i < 600000; i++)
{
count[rand()%6]++;
}
printf("test if it is a fair dice in 600,000 tosses:\n");
for(i = 0; i < 6; i++)
{
printf("%d ", count[i]);
count[i] = 0;
}
printf("\n\ntest start!\n\n");
int toss_count = 0;
int record[TEST_TIMES];
for(i = 0; i < TEST_TIMES; i++)
{
while( (!count[0]) || (!count[1]) || (!count[2]) || (!count[3]) )
{
count[rand()%6]++;
toss_count++;
}
printf("stop if number 1,2,3,4 have show up:\n");
for(j = 0; j < 6; j++)
{
printf("%d ", count[j]);
}
printf("you have tossed %d times.\n", toss_count);
record[i] = toss_count;
// reset data
for(j = 0; j < 6; j++)
{
count[j] = 0;
}
toss_count = 0;
}
// summary phase
int sum = 0;
for(i = 0; i < TEST_TIMES; i++)
{
sum += record[i];
}
int avg_toss_times = sum / TEST_TIMES;
printf("Acerage toss times need: %d\n", avg_toss_times);
return 0;
}
--
問題是扭蛋不可能公平都1/6機率阿..
那這篇不就跟SD無關了 囧>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.170.160
→ oldchiou : 請求機率達人 08/01 21:48
推 LADKUO56 :這期望值在不知道機率函數狀況之下不能算吧... 08/01 21:58
推 Saint1225 :我走錯版了嗎? 08/01 21:58
→ asdf751013 :樓上的問題沒有錯~~所以預設假定必為1/6 08/01 21:59
→ asdf751013 :實際上...每一機的出現機率應該要個別計算 08/01 21:59
→ asdf751013 :但是...不曉得扭蛋機的程式是怎樣跑的XDDD 08/01 21:59
→ leafwind :當然囉 因為我是延續前一篇推文的假設 全部1/6 08/01 22:01
→ leafwind :有人問到如果每台機體1/6的話 平均大概要幾抽 08/01 22:02
→ leafwind :事實上四天使這台扭蛋機大部分都是A死神跟A神龍.. 08/01 22:03
推 KZHenry :機率如果不是公正的1/6,怎算也是沒用的 08/01 22:12
→ KZHenry :話說我今天抽到的是A龍,又要存錢了 08/01 22:13
→ Saint1225 :發現我運氣不錯十抽破台 08/01 22:15
推 nonsence31 :好懷念的C語言...........= = 08/01 22:15
→ nonsence31 :真是噩夢一場 08/01 22:15
→ LADKUO56 :這題應該不是期望值 而是C6取4去掉有 5 6的情況 08/01 22:16
→ LADKUO56 :期望值算出來大概是2.3333 落在2跟3之間 08/01 22:16
用期望值來講的確不完全正確
應該說「期望幾抽能抽到四台天使」
→ gn01887818 :這是.. 08/01 22:20
推 LADKUO56 :不過講實話這機率應該不是都1/6 所以無用... 08/01 22:20
推 remix7 :想到高等機率就昏倒~非常困難 08/01 22:26
※ 編輯: leafwind 來自: 118.166.170.160 (08/01 22:29)
→ LADKUO56 :如果有做出分配的話應該也可以求 不過要蒐集大量樣本 08/01 22:31
→ leafwind :實際情況就要大量統計 這篇只考慮機會均等 所以12抽 08/01 23:13
推 gn00465971 :12抽的原因是重複 還記得條件機率吧 08/01 23:45
→ gn00465971 :"在已經A的情況下要抽到BCD任一" 比"抽ABCD任一"難 08/01 23:46
→ gn00465971 :類推下去就是12了 當然前提是各台機率1/6啦XD 08/01 23:47
推 creesybear :這個好耶~推呀~ 08/02 00:04
推 zet033 :最後才是重點.... 天曉得它機率是不是都一樣....囧 08/02 00:11
※ 編輯: leafwind 來自: 118.166.170.160 (08/02 00:47)