Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Dopethrone
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 12
#1

Генерация рандомного массива - C++

29.10.2017, 19:55. Просмотров 386. Ответов 7
Метки нет (Все метки)

Доброго времени суток, Задача такая, сделать массив [допустим 10 элементов] из рандомных чисел. КОТОРЫЕ НЕ ПОВТОРЯЮТСЯ.
Не понимаю как сделать так, чтоб они не повторялись, я понимаю, что надо сделать отдельную функцию, и и сравнивать числа, а потом возвратить истину во внешний блок, как это реализовать?

мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main() {
  srand (time(NULL)); // инициализируем рандом
 
  int i, n;           //переменные цикла, кол-во элементов массива
  cout << "Введите n: " ; //Кол-во элементов массива
  cin >> n;
  double list[n];     // целевой массив
 
  for (i = 0; i < n; i++){
    list[i] = (rand()%n)+1;
    cout << list[i];
    cout << " ";
  }
  cout << endl;
  return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2017, 19:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Генерация рандомного массива (C++):

Генерация рандомного массива
Привет, не могу понять как это делается:( Имеем последовательность (рандомных)...

Сортировка спиралью рандомного двумерного массива
Помогите пожалуйста, поиски длиной в несколько часов не увенчались успехом....

Вывод рандомного массива по возрастанию и убыванию
Заполнить массив из восьми элементов таким образом, чтобы значения элементов...

Вывод рандомного числа из заданного массива
Подскажите пожалуйста каким образом можно &quot;рандомно&quot; вывести на экран из...

Поменять местами минимальный и максимальный элементы рандомного массива
мне нужно поменять местами минимальный и максимальный элементы рандомного...

Генерация массива случайных чисел равномерно распределенных в заданном интервале и упорядочение массива
Помогите создать ПО (на любом языке программирования) позволяющее, генерирующее...

7
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
29.10.2017, 20:08 #2
Диапазон чисел имеет значение?
0
Даценд
Модератор
Эксперт .NET
4045 / 3885 / 2573
Регистрация: 20.04.2015
Сообщений: 7,060
29.10.2017, 20:30 #3
Dopethrone,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <random>
using namespace std;
 
int main() 
{
    srand(time(NULL)); // инициализируем рандом
    random_device rd;
    mt19937 g(rd());
    int i, n;           //переменные цикла, кол-во элементов массива
    cout << "Введите n: "; //Кол-во элементов массива
    cin >> n;
    double *list = new double[n];     // целевой массив
    for (i = 0; i < n; i++)
        list[i] = i + 1;
    shuffle(list, list+n, g);
    for (i = 0; i < n; i++)
        cout << list[i] << " ";
    return 0;
}
1
likehood
930 / 789 / 378
Регистрация: 25.12.2016
Сообщений: 2,627
Завершенные тесты: 3
29.10.2017, 20:43 #4
http://www.cyberforum.ru/c-beginners/thread44753.html
0
dailydose
659 / 205 / 88
Регистрация: 21.07.2016
Сообщений: 1,024
Записей в блоге: 2
Завершенные тесты: 1
29.10.2017, 20:50 #5
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
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
 
int main() {
    srand(time(NULL));
    int vektor[10];    
    int random;
    int uniqueflag;
    
    for(int i = 0; i < 10; i++) {
         do {
            /* Assume things are unique... we'll reset this flag if not. */
            uniqueflag = 1;
            random = rand() % 20+ 1;
            /* This loop checks for uniqueness */
            for (int j = 0; j < i && uniqueflag == 1; j++) {
               if (vektor[j] == random) {
                  uniqueflag = 0;
               }
            }
         } while (uniqueflag != 1);
         vektor[i] = random;
    }
    
    
    for(int n = 0; n < 10; ++n) {
        std::cout << vektor[n] << " ";
    }
    std::cout << std::endl;
    return 0;
}
Добавлено через 1 минуту
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
#include <stdio.h>
#include<cstdlib>
#include<iostream>
#include <time.h>
#define ARR_SIZE 10
#define MAX 20
 
int main()
{
    int i;
    int j;
    int array[ARR_SIZE];
    int hasDuplicate;
 
    srand(time(NULL));
 
    for(i=0;i<ARR_SIZE;i++)
    {
        array[i] = rand() % MAX;
        hasDuplicate = 0;
 
        for(j=0; j<=(i-1); j++)
            {
                if (array[i] == array[j])
                {
                    hasDuplicate = 1;
                    i--;
                }
 
            }
    }
 
 
    for(int n = 0; n < ARR_SIZE; ++n) {
        std::cout << array[n] << " ";
    }
    std::cout << std::endl;
    return 0;
}
0
Dopethrone
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 12
31.10.2017, 18:34  [ТС] #6
Надо вводить только кол-во элементов массива
0
LVV
98 / 102 / 39
Регистрация: 15.02.2010
Сообщений: 394
31.10.2017, 19:42 #7
Лучший ответ Сообщение было отмечено Dopethrone как решение

Решение

Цитата Сообщение от Dopethrone Посмотреть сообщение
я понимаю, что надо сделать отдельную функцию, и и сравнивать числа, а потом возвратить истину во внешний блок, как это реализовать?
ну, если так, как Вы понимаете, то, если через обычный массив для целых чисел в диапазоне [1; 1000] можно сделать так:
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
//проверено в Visual Studio 2017
#include <iostream>
#include <ctime>
bool repeat(int, int *);//прототип функции определяющей повторения
using namespace std;
 
int main()
{
    srand(time(NULL)); 
 
//определяем массив
    int n;
        cin >> n;
            int *M = new int[n];
                
//инициализируем массив
    for (int i = 0; i < n; i++)
        do
        {
            M[i] = 1 + rand() % 1000;//случайные в диапазоне от 1 до 1000
        } while (repeat(i, M));
 
//вывод массива
    for (int i = 0; i < n; i++)
        cout << M[i] << " ";
        
    return 0;
}
 
//при повторении - true
bool repeat(int k, int *M)
{
    for (int i = 0; i < k; i++)
        if (M[k] == M[i])
            return true;
    return false;
}
1
Dopethrone
0 / 0 / 0
Регистрация: 14.10.2017
Сообщений: 12
02.11.2017, 01:45  [ТС] #8
Спасибо!
0
02.11.2017, 01:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2017, 01:45
Привет! Вот еще темы с решениями:

Генерация массива
Что то не создает массив. // lab1.cpp: определяет точку входа для консольного...

Генерация массива
Помогите, пожалуйста. :cry: Например, есть число 01х01у0. Возьмем для пример...

Генерация строк из случайных символов массива
Запросить у пользователя количество строк, которые нужно сгенерировать,...

Генерация двумерного массива с определённым условием
Здравствуйте, обращаюсь за помощью тут впервые) Начал изучение языка С++ и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru