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

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

от magali , в категории: JavaScript , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от richie_mayert , год назад

@magali 

Вот пример кода на 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
41
42
#include 
#include 
#include 

int main() {
    const int rows = 3; // количество строк
    const int cols = 3; // количество столбцов

    std::vector> arr(rows, std::vector(cols)); // объявление двумерного массива

    std::random_device rd; // инициализация генератора случайных чисел
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> distrib(1, rows*cols); // диапазон случайных чисел

    std::vector used(rows * cols); // вектор для хранения уже использованных чисел

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            int num;
            bool unique = false;
            while(!unique) {
                num = distrib(gen); // генерация случайного числа
                // проверка на уникальность числа
                if (std::find(used.begin(), used.end(), num) == used.end()) {
                    unique = true;
                    used.push_back(num);
                    arr[i][j] = num; // запись числа в двумерный массив
                }
            }
        }
    }

    // вывод двумерного массива
    for (const auto& row : arr) {
        for (const auto& element : row) {
            std::cout << element << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}


В данном примере используется генератор случайных чисел std::mt19937 из библиотеки <random>. С помощью него генерируются случайные числа в заданном диапазоне. Предварительно создается вектор used, в котором будут храниться уже использованные числа, чтобы гарантировать их уникальность. Вложенный цикл while генерирует число, проверяет его уникальность с помощью функции std::find(), и, если число уникальное, записывает его в двумерный массив и добавляет в вектор used. Затем массив выводится на экран.