Вообщем, нужно сделать генерацию чисел и их запись в массив без их повторения. Код С++ #include <iostream> #include <ctime> using namespace std; void fillArray(int arr[], int size) { srand(time(NULL)); for (int i = 0; i < size; i++) { bool already; do { already = false; arr[i] = rand() % 100; //generate nums //check nums for (int j = 0; j < i; j++) { if (arr[j] == arr[i]) { already = true; break; } } } while (already); } } int main() { const int SIZE = 40; int arrA[SIZE]; int arrB[SIZE]; int arrC[SIZE]; fillArray(arrA, SIZE); fillArray(arrB, SIZE); fillArray(arrC, SIZE); for (int i = 0; i < SIZE; i++) { cout << arrA[i] << " "; } cout << endl; for (int i = 0; i < SIZE; i++) { cout << arrB[i] << " "; } cout << endl; for (int i = 0; i < SIZE; i++) { cout << arrC[i] << " "; } return 0; } Code #include <iostream> #include <ctime> using namespace std; void fillArray(int arr[], int size) { srand(time(NULL)); for (int i = 0; i < size; i++) { bool already; do { already = false; arr[i] = rand() % 100; //generate nums //check nums for (int j = 0; j < i; j++) { if (arr[j] == arr[i]) { already = true; break; } } } while (already); } } int main() { const int SIZE = 40; int arrA[SIZE]; int arrB[SIZE]; int arrC[SIZE]; fillArray(arrA, SIZE); fillArray(arrB, SIZE); fillArray(arrC, SIZE); for (int i = 0; i < SIZE; i++) { cout << arrA[i] << " "; } cout << endl; for (int i = 0; i < SIZE; i++) { cout << arrB[i] << " "; } cout << endl; for (int i = 0; i < SIZE; i++) { cout << arrC[i] << " "; } return 0; } Дело в том, что функция генерирует так сказать одинаковые числа для разных массивов, хотя это и очевидно, Не подскажите как сделать разные числа для разных массивов
Проблема заключается в том, что вы используете один и тот же генератор случайных чисел для всех трех массивов. Это означает, что при каждом вызове функции fillArray, вы начинаете генерировать случайные числа с той же самой начальной точки. Чтобы получить разные числа для каждого массива, вам нужно использовать разные начальные точки для генератора случайных чисел. Вы можете сделать это, например, передавая разные значения time(NULL) в качестве аргумента функции srand для каждого вызова. Вот как может выглядеть измененный код fillArray, учитывающий это: void fillArray(int arr[], int size, int seed) { srand(seed); for (int i = 0; i < size; i++) { bool already; do { already = false; arr[i] = rand() % 100; //generate nums //check nums for (int j = 0; j < i; j++) { if (arr[j] == arr[i]) { already = true; break; } } } while (already); } } Code void fillArray(int arr[], int size, int seed) { srand(seed); for (int i = 0; i < size; i++) { bool already; do { already = false; arr[i] = rand() % 100; //generate nums //check nums for (int j = 0; j < i; j++) { if (arr[j] == arr[i]) { already = true; break; } } } while (already); } } И затем вызывайте функцию fillArray для каждого массива, передавая разные значения time(NULL): const int SIZE = 40; int arrA[SIZE]; int arrB[SIZE]; int arrC[SIZE]; fillArray(arrA, SIZE, time(NULL)); fillArray(arrB, SIZE, time(NULL) + 1); // добавляем 1 секунду к первой начальной точке fillArray(arrC, SIZE, time(NULL) + 2); // добавляем 2 секунды к первой начальной точке Code const int SIZE = 40; int arrA[SIZE]; int arrB[SIZE]; int arrC[SIZE]; fillArray(arrA, SIZE, time(NULL)); fillArray(arrB, SIZE, time(NULL) + 1); // добавляем 1 секунду к первой начальной точке fillArray(arrC, SIZE, time(NULL) + 2); // добавляем 2 секунды к первой начальной точке Таким образом, каждый вызов fillArray будет использовать свой уникальный генератор случайных чисел, начиная с разных начальных точек, что приведет к генерации разных наборов случайных чисел для каждого массива.
Вариант предоставленный unnamed хороший. но srand не очень хороший ГПСЧ (лично по моему субъективному мнению, Вы в праве пользоваться хоть srand, хоть mt19937. Как вашей душе угодно). Поэтому хочу предложу иной ГПСЧ - mt19937. Пример уже готового mt19937: std::mt19937 mt; std::random_device rd; mt.seed(rd() ^ ( (std::mt19937::result_type) std::chrono::duration_cast<std::chrono::seconds>( std::chrono::system_clock::now().time_since_epoch() ).count() + (std::mt19937::result_type) std::chrono::duration_cast<std::chrono::microseconds>( std::chrono::high_resolution_clock::now().time_since_epoch() ).count())); std::uniform_int_distribution<int> dist(50, 200); int rand = dist(mt); p = mt() % rand; Code std::mt19937 mt; std::random_device rd; mt.seed(rd() ^ ( (std::mt19937::result_type) std::chrono::duration_cast<std::chrono::seconds>( std::chrono::system_clock::now().time_since_epoch() ).count() + (std::mt19937::result_type) std::chrono::duration_cast<std::chrono::microseconds>( std::chrono::high_resolution_clock::now().time_since_epoch() ).count())); std::uniform_int_distribution<int> dist(50, 200); int rand = dist(mt); p = mt() % rand;
HaKerHD93, это вихрь мерсенна? впервые вижу чтобы использовали его, ибо в 11 версии srand/rand работают прекрасно с учетом посредственности. + то что ты написал или скопировал это ужасная реализация. проще было линейку использовать.