甲贏的機率偏大一點點,簡單無腦程式碼如下:
#include
<stdlib.h>
#include
<time.h>
void
procedure
(
int
a
,
int
b
,
int
a_for_up_coin_num
,
int
b_for_up_coin_num
,
int
count
)
{
int
a_win
=
0
;
int
i
=
0
;
for
(
i
=
1
;
i
<=
count
;
i
++
){
for
(
a
=
1
;
a
<=
101
;
a
++
)
{
// 0表示反面 1表示正面
b
=
rand
()
%
2
;
if
(
b
==
1
)
{
a_for_up_coin_num
+=
1
;
}
}
for
(
b
=
1
;
b
<=
100
;
b
++
)
{
// 0表示反面 1表示正面
a
=
rand
()
%
2
;
if
(
a
==
1
)
{
b_for_up_coin_num
+=
1
;
}
}
if
(
a_for_up_coin_num
>
b_for_up_coin_num
)
{
a_win
+=
1
;
}
a_for_up_coin_num
=
0
;
b_for_up_coin_num
=
0
;
}
printf
(
"a WIn:%d-a/%d=%f
\n
"
,
a_win
,
count
,
a_win
/
(
count
*
1.0
));
}
int
main
(
int
argc
,
char
const
*
argv
[])
{
int
a
=
2
;
int
b
=
1
;
int
a_for_up_coin_num
=
0
;
int
b_for_up_coin_num
=
0
;
int
count
=
0
;
srand
((
int
)
time
(
0
));
/*設定隨機數bai種子*/
printf
(
"Try:"
);
scanf
(
"%d"
,
&
count
);
procedure
(
a
,
b
,
a_for_up_coin_num
,
b_for_up_coin_num
,
count
);
return
0
;
}
然後寫個小指令碼方便做多次嘗試
gcc
aa
.
c
&&
./
a
.
out
確實接近0.5,而且基本0.5偏上, 這是在有打平的情況下還能夠0.5偏上~
然後我把甲的投擲次數改成和乙此時一樣,都是100次,作為參照組
for (a=1;a<=100;a++)
結果變成:
甲101次能夠基本穩定0.5偏上,雙方相同投擲100次的情況下,確實是正常水平(因為打平局存在不會真正的到0.5)
說明那一次多出來的投擲真的比較重要...直接突破了0.5大關
感謝評論帽子老哥指出錯誤....