作者stimim (qqaa)
看板puzzle
標題Re: [問題] 條件機率(終極版)
時間Tue Nov 24 00:18:27 2009
1 #include<iostream>
2 #include<cstdio>
3 #include<cstdlib>
4 #include<ctime>
5
6 using namespace std;
7
8 int o[2] = {0} ;
9
10 int Rand()
11 {
12 int x = rand() % 2;
13 o[x] ++ ;
14 return x ;
15 }
16
17 int main()
18 {
19 srand( time(NULL) ) ;
20
21 int n , B ;
22
23 cout << "How many times you want to play?" << endl ;
24 cin >> n ; //模擬 n 次
25 cout << "How many balls ?" << endl ;
26 cin >> B ; //袋子裡有B顆球
27
28 int b = 0 , w = 0 ;
29 for( int i = 0 ; i < n ; )
30 {
31 int color[10] ;
32
33 for( int k = 0 ; k < B ; k ++ )
34 color[k] = Rand() ; //決定球的顏色
35 int c = 0 ;
36
37 for( int k = 0 ; k < B ; k ++ )
38 if( color[k] )
39 c ++ ; //計算袋子裡有幾顆白球
40
41 if( c >= B - 1 ) //如果袋子裡至少有B-1顆球
42 {
43 if( c == B ) //如果剩下的那一顆也是白色
44 w ++ ;
45 else //不然就是黑色
46 b ++ ;
47 i ++ ;
48 }
49 }
50
51 cout << "0: " << o[0] << "\t" << 100.*o[0]/(o[0]+o[1]) << "%" << endl ;
52 cout << "1: " << o[1] << "\t" << 100.*o[1]/(o[0]+o[1]) << "%" << endl ;
53 puts( "------------------------------------" ) ;
54 cout << "Result:" << endl ;
55 cout << "W: " << w << "\t" << 100.*w/(w+b) << "%" << endl ;
56 cout << "B: " << b << "\t" << 100.*b/(w+b) << "%" << endl ;
57
58 return 0;
59 }
執行結果:(已翻譯和補充說明)
模擬幾次?
1000000
袋子裡有幾顆球?
2
------------------------------------
模擬結果:
在這次的模擬中,亂數選到0的機率是:
1333605次 50.0043%
在這次的模擬中,亂數選到1的機率是:
1333375次 49.9957%
------------------------------------
你拿到白球333375次 機率 33.3375%
你拿到黑球666625次 機率 66.6625%
模擬幾次?
1000000
袋子裡有幾顆球?
4
------------------------------------
模擬結果:
在這次的模擬中,亂數選到0的機率是:
6394380次 49.9949%
在這次的模擬中,亂數選到1的機率是:
6395688次 50.0051%
------------------------------------
你拿到白球199272次 機率 19.9272%
你拿到黑球800728次 機率 80.0728%
解釋一下:
這裡的概念是,如果袋子裡恰好有B-1個白球,那你就是會選到黑球
如果袋子裡全部是白球,那你選到白球(廢話)
袋子裡白球少於B-1個的情況不在樣本空間中。
在模擬時,亂數選到1代表白球,選到0代表黑球。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.164.156
1F:推 puzzlez:可以把結論用中文再翻譯一次嗎?>"< 11/24 00:19
2F:→ stimim:結論? 11/24 00:20
3F:推 puzzlez:我是說那個結果 11/24 00:20
※ 編輯: stimim 來自: 61.228.164.156 (11/24 00:27)
4F:推 puzzlez:哦哦哦 我看懂了~:-) 11/24 00:29
5F:推 puzzlez:不過我以為是 1/2 呢~結果不是..... 11/24 00:31
6F:→ stimim:可是我覺得這種解釋方式有點怪怪的 11/24 00:33
7F:→ stimim:我覺得1/2比較合理XD 11/24 00:34
8F:推 puzzlez:那就把意義也附註 0(白球) 1(黑球)之類... 11/24 00:34
9F:推 puzzlez:因為四顆球時 一黑三白 及 三黑一白時 機率最高 11/24 00:35
10F:推 puzzlez:所以吐出三白時 剩下的一顆是黑球 應該是合理的... 11/24 00:36
11F:推 puzzlez: ^的機率較高 11/24 00:37
1/2的想法:
不管袋子裡是什麼狀況,反正我些選一顆,
再把剩下的到出來,如果都是白色的,那才是我的樣本空間,
再去檢查手裡的球是什麼顏色。
2/3的想法:
樣本空間就是袋子裡最多只有一顆黑球的情況,
如果袋子裡有黑球,那我就會選到黑球。否則才是白球。
就我個人認為1/2的想法比較符合題意。
※ 編輯: stimim 來自: 61.228.164.156 (11/24 00:44)
12F:推 puzzlez:那所以是寫程式的方式要做改變嗎? 11/24 00:45
13F:→ stimim:不同的想法可以寫出不同的程式,A大的程式是針對1/2寫出來 11/24 00:45
14F:→ stimim:的,我的程式是針對2/3,總是可以寫出符合條件的程式 11/24 00:47
15F:推 puzzlez:可是你的答案不是2/3啊? 11/24 01:02
16F:→ puzzlez:只有第一個是而已.....第二個 4顆球那個就不是了.... 11/24 01:03
17F:推 adrianshum:看罷你的程式,你做的只是說 n 顆球,究竟是 11/24 01:32
18F:→ adrianshum:n-1 白球 + 1 黑球,還是 n 白球的機會比較大 11/24 01:33
19F:→ adrianshum:那當然是前者比較大。但原問題是你抽到一個球之後所有 11/24 01:33
20F:→ adrianshum:剩下的都是白球,情況不一樣耶 11/24 01:34
情況不一樣是當然的,因為這個程式是用另一種角度去解釋題目,
但是如我所補充的,2/3的想法在某種程度上曲解了題意,
在我看來這種解讀方式是有問題的。
21F:推 puzzlez:哦...我懂原PO 2/3 的意思了.....我弄錯了^^" 11/24 05:46
※ 編輯: stimim 來自: 140.112.7.59 (11/24 10:59)