2014-11-02 4 views
1

Я хочу найти минимальное количество или максимальное число, которое я мог бы получить, если бы поставил 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; 
} 
+2

Просто - если у вас есть 'X' кубики, каждая из которых выполняет минимальное значение MIN и максимум MAX, тогда общий минимум равен« X * MIN », а общий максимум равен« X * MAX ». Если у вас классические 6-сторонние кости, у них есть 'MIN = 1',' MAX = 6'. Вы бросаете 3 таких кубика, тогда общий минимум равен «3 * 1 = 3», а общий достижимый максимум равен «3 * 6 = 18'. Или я неправильно понял вопрос? –

+0

@RomanHocke Это имеет смысл, но если я скажу программе бросить 3 кубика, из которых 6 сторон; то все, что мне нужно сделать, это умножить количество сторон на число костей, чтобы достичь максимального значения, но как бы знать, каково минимальное значение, или это всегда будет minrange? – cscx

+0

Вы должны знать, каково минимальное количество на каждой кости. Если каждый кубик имеет минимум «MIN», вы можете свернуть «X * MIN» как минимум. Поэтому, если вы используете классические кубики, минимальное число которых равно числу «1», то минимальный размер, который вы катите с кубиками 'X', должен быть« X * MIN = X * 1 = X'. Представьте себе три кубика в руке. Первые рулоны 1 минимальны, вторая - 1, как минимум, а третий - 1, как минимум, тоже. Что добавляет минимальный бросок из трех. –

ответ

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

Смежные вопросы