Другие языки программирования и технологии

С++ Random(); Random(); Как задать диапазон значений от -116 до 950?

Kahramon Uldashev
Kahramon Uldashev
179
Если тебе нужно целое число в этом интервале, то для начала следует определить количество возможных вариантов.

Например, для [1..3] всего 3 варианта (1, 2, 3).
Для [4..10] имеем 10 - 4 + 1 = 7 вариантов (4, 5, 6, 7, 8, 9, 10).
Для [a..b] имеем b - a + 1 вариант.

int a = -116;
int b = 950;
int count = b - a + 1;

Функция std::rand() вернет случайное целое неотрицательное число в огромном диапазоне.

int q = std::rand();

Если взять у него остаток от деления на число вариантов count, то получим число от 0 до count-1:

int q = std::rand() % count;

То есть это число от 0 до b-a.

Чтобы превратить его в число от a до b, нужно прибавить к нему a.
Тогда 0 превратится в a.
b-a превратится в b.
Любые числа между ними сдвинутся соответственно, оказавшись в интервале от a до b.

int q = std::rand() % count + a;
Евгений Вдовенко
Евгений Вдовенко
99 546
Лучший ответ
#include <iostream>
#include <random>
#include <iomanip>
using namespace std;
short generator(short a, short b) {
if (a > b) swap(a, b);
const uniform_int_distribution<short> uid(a, b);
random_device rd;
mt19937 gen(rd());
return uid(gen);
}
int main() {
auto n = 200U;
while (n--) {
cout << setw(6U) << generator(-116, 950);
if (0 == n % 10) cout.put('\n');
}
system("pause");
}
Mosalev Andrey
Mosalev Andrey
82 884
Как помню из школьных уроков, следует вычесть из итогового числа максимальное отрицательное и увеличить максимальное число на максимальное отрицательное по модулю.
Kahramon Uldashev Поясните. Я не понял.