2012-09-24 55 views
1

我寫了這個程序,滾動一對骰子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%。我哪裏錯了?

+0

這裏只有一個滾2.同去的12 – Cody

+0

哎呀方式。好吧,所以失敗的概率大約是11%。再多研究一下,我發現這個比例應該接近49%。無論哪種方式,這並不能解釋爲什麼我的程序沒有給我這個百分比。哦,我希望有人能幫助我... – user1695758

+0

不考慮代碼中的邏輯錯誤,請注意'rand()%6'不會完全一致,儘管這可能不足以解釋您所看到的差異。 – twalberg

回答

1

這可能是什麼造成您的問題:

else if (value = keyValue) { 

你分配,而不是比較。這將始終評估爲真,從而人爲地誇大您的損失。您應該在此處使用==而不是=

另外,對於既不是贏也不輸的紙卷,您不是遞增winsloss計數器,但是您要添加到count。所以你最終會遇到wins + loss != count的情況。在計算贏額百分比時,請嘗試將其計算爲wins/(loss + wins)

+0

謝謝。現在修正了,但它仍然給我同樣的結果。 – user1695758

+0

您在跟蹤贏輸數量方面也存在一個錯誤。請參閱我上面的答案。 – Cody

+0

謝謝!這正是問題所在!我剛剛擺脫了count ++語句,只是將整個事件轉換爲for循環來計算它運行的次數。非常感謝sooo! – user1695758