2014-11-02 46 views
1

我想找到最小數量或最大數量,如果放入X數量的骰子和X數量的骰子邊,我可能會收到最小數量或最大數量。我知道如果我只擲一個骰子,那麼最小值就是「minrange」,最大值是「minrange」+「numOfSides」,但是如果我擲出多個骰子,我如何找到可能產生的最小/最大數量?如何從骰子滾動中找到最小值和最大值?

double rollDice(int numOfDice, int numOfSides, int divide, int minrange) { 
    int i = 0; 
    subtotal = 0; 
    while (i < numOfDice) { 
     roll = 0; 
     roll = minrange + (rand() % numOfSides); 
     subtotal += roll; 
     i++; 
    } 
    return subtotal/divide; 
} 
+2

簡單地說 - 如果你有'X'骰子,每個骰子最小值和最大值都是'MIN',那麼總的最小值是'X * MIN',總的最大值是'X * MAX'。如果你有經典的6面骰子,它有'MIN = 1','MAX = 6'。你擲出3個這樣的骰子,那麼總的最小值是'3 * 1 = 3',總的可達到的最大值是'3 * 6 = 18'。或者我誤解了這個問題? – 2014-11-02 00:43:31

+0

@RomanHocke這是有道理的,但如果我確實告訴程序要擲出3個骰子,其中有6個面;那麼我所要做的就是將邊的數量乘以骰子的數量以達到最大值,但它如何知道最小值會是多少,還是總是最小值? – cscx 2014-11-02 00:51:37

+0

你必須知道,每個骰子的最小數字是多少。如果每個骰子都有最小值「MIN」,那麼你可以將'X * MIN'滾動到最小。因此,如果您使用經典的骰子,其最小可滾動數字爲'1',那麼您用'X'擲骰滾動的最小值必須是'X * MIN = X * 1 = X'。試想一下你手中的三顆骰子。第一個滾筒1最小,第二個滾筒至少滾動1,第三個最小滾動1。這增加了最小三卷。 – 2014-11-02 01:00:13

回答

1
#include <iostream> 

void rollDice(int numOfDice, int numOfSides, int* minRange, int* maxRange) { 
    *minRange = numOfDice; 
    *maxRange = numOfDice * numOfSides; 
    return; 
} 

int main() { 

    int minRange; 
    int maxRange; 
    int noDice = 3; 
    int noSides = 6; 

    rollDice(noDice, noSides, &minRange, &maxRange); 

    std::cout << "Minimum range for " << noDice << " dice with " << noSides << "sides is: " << minRange << std::endl; 
    std::cout << "Maximum range for " << noDice << " dice with " << noSides << "sides is: " << maxRange << std::endl; 

    return 0; 
} 

首先,在你的問題稍有不慎,一個骰子的最大比分不會是minRange + numOfSides,這將是numOfSides,併爲骰子的最低分數是noDice任意數量* 1 = noDice,最高分數爲noDice * noSides。

由於您想計算任意數量的任意雙面骰子的最小和最大總計,從函數中檢索兩個值而不創建數據結構或數組或對象的最佳方式是使用指針。通過使用&運算符傳遞變量的地址來存儲minRange和maxRange,rollDice函數可以直接訪問用於保存這些變量的內存塊並將它們設置爲適當的值。

這是我第一次嘗試回答問題,希望這是你正在尋找的。

+1

是的,這就是我正在尋找的東西,但是我實施它有點不同。感謝您展示了一些不同的方式,我幾周前剛剛開始使用C++,所以我只是掌握基本知識。 :) – cscx 2014-11-05 23:53:11

相關問題