C++ предоставляет функцию rand()
для генерации случайных чисел. Однако эта функция может возвращать одинаковые числа при многократных вызовах. Чтобы избежать повторений, можно использовать следующие подходы:
Инициализация генератора случайных чисел
Используйте функцию srand(time(nullptr))
для инициализации генератора случайных чисел с seed, основанным на текущем времени. Это обеспечивает различный набор случайных чисел для каждого запуска программы.
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand(time(nullptr));
for(int i = 0; i < 10; i++) {
std::cout << rand() % 100 << " ";
}
return 0;
}
Создание массива неповторяющихся чисел
Можно заранее создать массив с последовательностью чисел без повторений и затем перемешать его с помощью алгоритма "Тасование Фишера-Йетса".
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
int main() {
srand(time(nullptr));
std::vector<int> numbers;
for(int i = 0; i < 100; i++) {
numbers.push_back(i);
}
std::random_shuffle(numbers.begin(), numbers.end());
for(int i = 0; i < 10; i++) {
std::cout << numbers[i] << " ";
}
return 0;
}
Использование std::shuffle
Стандартная библиотека C++ также предлагает функцию std::shuffle
для перемешивания элементов в контейнере. Это аналогично методу "Тасование Фишера-Йетса".
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
#include <ctime>
int main() {
std::vector<int> numbers;
for(int i = 0; i < 100; i++) {
numbers.push_back(i);
}
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(numbers.begin(), numbers.end(), g);
for(int i = 0; i < 10; i++) {
std::cout << numbers[i] << " ";
}
return 0;
}
Эти методы обеспечивают уникальность случайных чисел, делая вашу программу более устойчивой и предсказуемой.
Категория: Компьютерные науки
Теги: программирование, C++, алгоритмы