2014-11-02 211 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

相关问题