2013-03-23 2 views
2

Если я использую два случайных числа, как я могу гарантировать, что первый из этих чисел, сгенерированных, всегда больше второго, чтобы представить пользователю вычитание или викторину деления?Управление случайными числами в C#

+7

Не было бы очень случайным, не так ли? – Oded

ответ

1
var max = 1000; 
var rnd = new Random(); 
int a, b; 
do 
{ 
    a = rnd.Next(max); 
    b = rnd.Next(max); 
} while (a <= b); 

Вы можете использовать аналогичный подход для более сложных условий тоже (например, если ваша задача состоит в том, чтобы произвести 2 номера, которые в сумме дают более чем 100, и т.д.).

Вам нужно сделать свой код умнее, если вероятность случайных чисел, удовлетворяющих вашему состоянию, настолько мала, что поколение занимает слишком много времени, но для этой конкретной задачи этот подход достаточно хорош.

+1

Спасибо, отличный ответ и обработал – Rifki

9

У вас нет.

Просто проверьте, какой из них больше и соответствует соответственно.

+0

+1 И не могу представить, что на этот вопрос встает вопрос. –

+0

+1 от меня тоже - приятно приятно – duDE

2

Вы производите второе случайное число и добавляете его к первому.

+1

Как насчет добавления случайного числа к первому и вызова результата вторым номером? –

+0

Вы имеете в виду, nSec + = nFisrt? – duDE

+0

Что-то вдоль этих линий. Не сказать, что ваш первоначальный ответ неверен, но это, вероятно, будет рабочей альтернативой :) –

0

Вы можете сгенерировать числа, подобные этому (псевдокод): (int)(a*rand()+b) где a и b управляют диапазоном и начальной точкой ваших случайных чисел.

Если a1=10, b1=1, например, вы получаете диапазон 1-10. С a2=10 и b2=11 вы получаете номера в диапазоне 11-20, что может быть полезно для простых проблем вычитания.

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