/* A君とB君がそれぞれ a 円、b円お金をもっている。 A君とB君は2人で以下のような賭けをする: 「A君が勝てばB君から1円とりあげ、B君が勝てばA君から1円とりあげる」 ○A君の所持金が 0円(A君破産)になるか a+b円 (A君が最終的に勝利)になるまで続ける ○A君が勝つ確率は $p$、B君が勝つ確率は $q$ ($p+q=1$) ○賭けは以前の賭けの結果とは関係なく独立 */ #include #include #include #include void srand(unsigned int); int main(void) { double rnd; double p; long int i, Nmax; int orig_a, orig_b, Maxtrial; int a, b, trial; int timesum, ruincounta; srand((unsigned)time(NULL)); p = 0.5; // A君の勝つ確率 orig_a = 20; // 元のA君の所持金 orig_b = 20; // 元のB君の所持金 Nmax = orig_a; if(orig_a p){ a= a -1; b = b +1; } else{ a = a +1; b = b -1; } // printf("%d ", a); if(a == 0){ printf("(%3dth Trial) A ruins! Ruin time = %d\t\n",trial,i); ruincounta ++; timesum = timesum + i; break; } if(b == 0){ printf("(%3dth Trial) B ruins! Ruin time = %d\t\n",trial,i); timesum = timesum + i; break; } } if(i>Nmax-2) printf("(%dth Trial) Not ruin!\n",trial); } printf("===============================================\n"); printf("Trial Times = %d\n",Maxtrial); printf("Init A = %d, B = %d\n",orig_a, orig_b); printf("Win ratio of A = %8.5lf \n",p); printf("------------------------------\n"); printf("Sample ratio that A ruins = %8.5lf\n",\ (double)ruincounta/Maxtrial); printf("Time average = %8.4lf\n",\ (double)timesum/Maxtrial); printf("===============================================\n"); return 0; }