2016-01-23 3 views
-1

Я пытаюсь создать программу угадывания игр, в которой пользователь думает о числе от 1 до 100, а затем компьютер случайно генерирует (догадывается) число от 1 до 100. Затем пользователь указывает на то, что их номер выше (H), ниже (L) или же (Y) в качестве угадываемого номера. Проблема, которую я имею меняется диапазон, что компьютер генерирует свое предположение в.Модифицирование диапазонов rand() C++

Так скажем, мой номер и компьютер генерирует как его догадку. Я бы ввел H, указав, что мой номер выше его догадки. Затем компьютер изменяет параметры для генерации номера между и .

int high = 100, low = 1; 
char answer; 

Установка переменных.

srand(time(0)); 

У меня есть это, чтобы по-настоящему случайным образом генерировать.

int guess = rand() % high + low; 
cout << "Is your number " << guess << "?\n"; 
cin >> answer; 

Сформировать номер, спросить, если число это то, что я имею в виду, а затем просить меня, чтобы ответить, если она выше, ниже, или исправить.

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

switch (answer) 
    { 
    case 'H': 
     low = (guess + 1); 
     high = (high - guess); 
     break; 
    case 'L': 
     high = guess; 
     break; 
    default: 
     break; 
    } 

Я предполагаю, что я не понимаю, как работает rand(). Как я понимаю, весь

rand() % 100 //range of 0 and 99 
rand() % 100 + 1 // range of 1 and 100 

Но я хочу знать, как я могу изменить параметры так, что я получаю

rand() % max + min // range of min and max 

в то время как я постоянно менять и обновлять значения для макс и мин.

+3

Вы имеете в виду, если 'min = 3' и' max = 10', то вы хотите угадать где-то между 3 и 10? Если это так, тогда вы просто будете делать rand()% (max + 1 - min) + min'. – Cornstalks

+0

Если вы можете, используйте лучший RNG, такой как [встроенные в C++ 11] (http://en.cppreference.com/w/cpp/numeric/random) или [Boost] (http: // www .boost.org/DOC/LIBS/1_60_0/DOC/HTML/boost_random.html). – krlmlr

ответ

3

Вы в основном на правильном пути. Использование rand() % n даст вам значение в полуоткрытом диапазоне [0, n). Поэтому, если вам нужны номера от 0 до 100, включительно, используйте rand() % 101. Когда у вас есть максимальное и минимальное значение, n - max - min + 1. Это дает вам диапазон значений начиная с 0. Чтобы получить диапазон значений, который начинается с min, просто добавьте min к значению.

+0

Случайные числа не будут равномерно распределены, если диапазон 'rand()' не кратен 'n'. – krlmlr

+0

@krlmlr - да, это то, что вы сказали в своем комментарии к вопросу. –

+0

Вы также можете сделать это с помощью 'rand()'. См. Http://c-faq.com/lib/randrange.html плюс несколько повторяющихся вопросов на этом сайте. – krlmlr

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