當前位置: 華文星空 > 知識

甲有101個硬幣,乙有100個硬幣,兩人隨機撒在地面上,甲比乙正面朝上多的機率是多少?

2021-02-15知識

甲贏的機率偏大一點點,簡單無腦程式碼如下:

#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大關

感謝評論帽子老哥指出錯誤....