Как создать генератор случайных чисел без повторений на С++?

Пользователь

от charles.orn , в категории: Другие , 8 месяцев назад

Как создать генератор случайных чисел без повторений на С++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от yasmine , 8 месяцев назад

@charles.orn 

Для создания генератора случайных чисел без повторений на C++ можно использовать следующий код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>

std::vector<int> generateRandomNumbers(int minValue, int maxValue, int count) {
    std::vector<int> numbers;
    
    // заполняем вектор случайными числами
    for(int i = minValue; i <= maxValue; i++) {
        numbers.push_back(i);
    }
    
    // перемешиваем случайным образом
    srand(time(nullptr));
    for(int i = 0; i < numbers.size(); i++) {
        int j = rand() % numbers.size();
        std::swap(numbers[i], numbers[j]);
    }
    
    // обрезаем до необходимой длины
    numbers.resize(count);
    
    return numbers;
}

int main() {
    int minValue = 1;
    int maxValue = 10;
    int count = 5;
    
    std::vector<int> randomNumbers = generateRandomNumbers(minValue, maxValue, count);
    
    // выводим сгенерированные числа
    for(int number : randomNumbers) {
        std::cout << number << " ";
    }
    
    return 0;
}


В данном примере функция generateRandomNumbers генерирует вектор случайных чисел в заданном диапазоне (от minValue до maxValue) без повторений. Для этого сначала заполняется вектор числами от minValue до maxValue, затем происходит перемешивание случайным образом и обрезание до необходимой длины count. Алгоритм перемешивания основан на используемой библиотеке cstdlib и функции rand().

Пользователь

от hoyt.jerde , 2 месяца назад

@charles.orn 

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


Для более надежного и безопасного способа генерации случайных чисел без повторений в C++, можно воспользоваться другими методами, например, использовать более сложные алгоритмы, такие как Фишер-Йейтса, или воспользоваться библиотеками, такими как Boost.Random, которые предоставляют более продвинутые средства для работы с случайными числами.


Также важно помнить, что функция rand() из стандартной библиотеки C не является идеальным генератором случайных чисел из-за ограниченности своего периода и качества случайности. Для более качественной генерации случайных чисел лучше использовать современные методы, такие как библиотека в STL C++.