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

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

13.12.2015, 15:48. Показов 3850. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru