Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 10

Как рандомно заполнить массив с неповторяющимеся значениями?

13.12.2015, 15:48. Показов 3890. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан, допустим, массив из 16 значений, как заполнить его рандомно, но так, что бы ни одно число не повторялось?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2015, 15:48
Ответы с готовыми решениями:

С помощью датчика случайных чисел заполнить массив из 10 элементов неповторяющимеся числами
С помощью датчика случайных чисел заполнить массив из 10 элементов неповторяющимеся числами

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

Как заполнить массив числами от 0 до 100 (не рандомно)
Подскажите пожалуйста: 1. Как заполнить массив числами от 0 до 100 (не рандомно). 2. Можно ли через консоль заполнить массив (см....

11
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
13.12.2015, 15:53
http://en.cppreference.com/w/cpp/algorithm/unique
0
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 10
13.12.2015, 20:51  [ТС]
А как-нибудь по-другому можно? Просто выглядит как то сложно, боюсь, я такого даже не пойму.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
13.12.2015, 21:02
Генерируешь число и проверяешь, что его нет в уже заполненной части. Если есть, генерируешь следующее и т. д.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
13.12.2015, 21:02
1) Берем указатель выделяем место под 16 эл.
2) записываем рендомное число в 1 эл нашего массива.
3) Получаем рендомное число снова, проверяем по всему массиву нашему нету ли там такого, если нету записываем, если есть - перегенерируем
4) Повторяем 3 пункт пока не сташнит или размер массива не будет 16.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
13.12.2015, 21:35
Надо учиться включать голову.
Модернизация варианта rikimaru2013, которая будет намного эффективнее на небольших числах.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <algorithm>
 
using namespace std;
 
int main()
{
    srand(time(0u));
   const int N = 16;
   int Arr[N] = {rand()%N};
   for (int i=1;i<N;i++) Arr[i] = Arr[i-1]+rand()%5+1;
 
   random_shuffle(begin(Arr),end(Arr));
   for (const auto &i:Arr) cout << i << ' ';
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
13.12.2015, 22:20
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
пока не сташнит
А ведь может, не правда ли?
Генерация массива целых случайных чисел, которые не повторяются
Тут есть нормальный алгоритм. Без риска "сташнит"
0
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 10
14.12.2015, 20:38  [ТС]
А так не правильно?
C++
1
2
3
4
5
6
7
8
9
int a[16];
int i,j,k;
bool check=true;
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 srand(time(NULL));
do { j=rand()%16; for (i=0; i<16; i++) {if (j==a[i]) {check=false;}} if (check==true) {a[k]=j; k++;}} while (k<16);
}
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
14.12.2015, 22:28
Цитата Сообщение от chelovek3800 Посмотреть сообщение
А так не правильно?
Ну вы так бы и сказали, что вам в диапазоне индексов надо. Это элементарно делается:
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 <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iterator>
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    srand(unsigned(time(0)));
 
    int     const   ARR_SIZE            =   10;
    int             arr[ ARR_SIZE ]     =   {0};
 
    std::generate
        (
            std::begin  ( arr ),    
            std::end    ( arr ),
            []
            {
                static  auto    i   =   0;
                return  i++;
            }
        );
 
    std::random_shuffle
        (
            std::begin  ( arr ),    
            std::end    ( arr )
        );
 
    std::copy
        (
            std::begin                      ( arr ),    
            std::end                        ( arr ),
            std::ostream_iterator< int >    ( std::cout, "\t" )
        );
 
    system("pause");
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.12.2015, 22:52
chelovek3800, Пытался я строчку 8 из вашего кода прочесть. Пока дошел до конца - забыл с чего начиналось...
Это очень любопытное явление, на форуме, Увы! частенько встречающееся. Человек просит помощи, и совершенно не думает о том, что помогающему тоже неплохо бы помочь. Хотя бы без излишних усилий понять - чем?
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 2
15.12.2015, 13:45
Как вариант можно заполнить массив неповторяющимеся значениями (например от 0 до N) а потом перемешать значения его элементов.
0
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 10
15.12.2015, 18:49  [ТС]
Спасибо за старания, сделал перемешиванием из-за своей тупости
C++
1
2
3
4
5
6
7
8
9
10
11
12
int size=16;
int a[size];
int i, j ,k;
void swap(int &left, int &right) {
    int tmp = left;
    left = right;
    right = tmp; }
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
          for (i = 1; i < size; i++) { a[i]=i;}
          for(int i = 0; i < size; i++) {swap(a[i], a[rand() % size]);}}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2015, 18:49
Помогаю со студенческими работами здесь

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

Как рандомно заполнить двумерный массив данными из другого двумерного массива?
Есть двумерный массив: string obj = new string { {&quot;0&quot;, &quot;0&quot;}, {&quot;1&quot;, &quot;Совершенно секретно&quot;}, {&quot;2&quot;, &quot;Секретно&quot;}, ...

Как заполнить массив значениями
как заполнить масиив в вба??????????????

Как заполнить значениями многомерный массив
ДобрДобрый вечер,уважаемые форумчяне! Возник такой вопрос, как на чистом Си ввести в масиив типа: int Arr; ,значения трех переменных int...

Как заполнить массив строк значениями?
Здравствуйте)Подскажите пожалуйста,как заполнить массив строк значениями? Я пишу string mas_str = new string...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru