作者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)