如何从掷骰子中找到最小值和最大值?

时间:2014-11-02 00:38:14

标签: c++ random max min dice

我想找到一个最小数量或最大数量,如果放入X量的骰子和X量的骰子边,我可能会收到。我知道如果我只掷一个骰子,那么最小值将是“minrange”,最大值将是“minrange”+“numOfSides”,但是如果我要用X量的边掷出多个骰子;我如何找到可以生成的最小/最大数量?

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;
}

1 个答案:

答案 0 :(得分: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。

当你想要计算任意数量的任意侧面骰子的最小和最大总数时,从函数中检索两个值而不创建数据结构或数组或对象的最佳方法是使用指针。通过传递变量的地址来使用&amp;存储minRange和maxRange。运算符rollDice函数可以直接访问用于保存这些变量的内存块,并将它们设置为适当的值。

这是我第一次尝试回答问题,希望这是你正在寻找的。