我寫了這個程序,滾動一對骰子20000次。規則是:模具滾動程序的故障
- 如果7或11被捲起,則玩家贏得
- 如果2,3,或12被捲起然後玩家輸掉。
- 如果沒有上述被軋製,則總和被存儲和沖模再次捲起
第二輥規則:
- 如果7被捲起,則玩家贏得
- 如果同一個金額作爲之前推出,那麼球員失去
- 如果沒有,直到那兩個條件都滿足玩家再次滾動。
在結束它計算的遊戲百分比勝出。 根據同事的說法,我的問題是我應該獲得39%-60%左右的遊戲比例,但是每次運行該程序時,我都會得到20%左右,我不明白爲什麼。難道我做錯了什麼?有人能幫助我嗎?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
int dieOne, dieTwo, keyValue, value, wins = 0, firstWins = 0, subWins = 0, loss = 0, count=0;
double percentWin, percentFirstWins, percentSubWins;
srand(time(NULL));
do{
dieOne = rand() % 6 + 1;
dieTwo = rand() % 6 + 1;
value = dieOne + dieTwo;
count++;
if (value==7||value==11) {
firstWins++;
wins++;
}
else if (value== 2||value==3||value==12) {
loss++;
}
else {
do{
keyValue = value;
dieOne = rand() % 6 + 1;
dieTwo = rand() % 6 + 1;
value = dieOne + dieTwo;
count++;
if (value==7) {
subWins++;
wins++;
}
else if (value = keyValue) {
loss++;
}
} while (value != 7 && value != keyValue);
}
} while (count <= 20000);
percentWin = (double) wins/count * 100;
percentFirstWins = (double) firstWins/count * 100;
percentSubWins = (double) subWins/count * 100;
printf("You won %.1lf percent of your games! \nYou won %.1lf percent of games on the first roll.\nYou won %.1lf percent of games on the second roll.\n", percentWin, percentFirstWins, percentSubWins);
system("pause");
}
有6種可能的方式滾動7種兩種可能的方式滾動的11
這是一個總的8種可能的方法來贏得在第一滾子。
有36(6^2)種方式擲骰子。這意味着您在第一輪或大約22%的時間內有8/36的機會獲勝。此外,我們有2種可能的方法來滾動2種和2種可能的方式來滾動3種和2種可能的方式來滾動12個。這意味着有1個6次機會(6/36)的在第一輪失敗,或大約17%的時間。
所以戰績其餘61%必須來自第二卷。無論如何,我的計劃產生了一個非常高的連敗,而我的同事們的計劃似乎產生了總勝率的40-60%。我哪裏錯了?
這裏只有一個滾2.同去的12 – Cody
哎呀方式。好吧,所以失敗的概率大約是11%。再多研究一下,我發現這個比例應該接近49%。無論哪種方式,這並不能解釋爲什麼我的程序沒有給我這個百分比。哦,我希望有人能幫助我... – user1695758
不考慮代碼中的邏輯錯誤,請注意'rand()%6'不會完全一致,儘管這可能不足以解釋您所看到的差異。 – twalberg