213 / 160 / 52
Регистрация: 09.12.2017
Сообщений: 520
|
||||||
1 | ||||||
Заполнить массив числами без повторов в диапазоне [a,b]18.02.2019, 17:02. Просмотров 3228. Ответов 10
Вот условие : заполнить массив числами без повторов в диапазоне [a,b].
Вот как решил это я :
Например : Код
размер = 5 а = 1 b = 3 ... Проверка выше позволяет с этим бороться. Меня интересует, можно ли решить это лучше. Критика кода приветствуется. Спасибо !
0
|
|
18.02.2019, 17:02 | |
Заполнить массив случайными числами в диапазоне Заполнить массив нечётными числами в диапазоне от -10 до 30 по возрастанию Заполнить массив заданного размера нечётными числами в указанном диапазоне
__________________
10
Помогаю в написании студенческих работ здесь. Записывайтесь на профессиональные курсы C++ разработчиков |
|
1533 / 780 / 321
Регистрация: 11.10.2018
Сообщений: 4,087
|
|
18.02.2019, 17:11 | 2 |
- почему рандомный номер 1 раз генерируется, может быть лучше было бы что бы при каждой итерации цикла в строке 11 рандомный номер был каждый раз новый?
1
|
213 / 160 / 52
Регистрация: 09.12.2017
Сообщений: 520
|
||||||
18.02.2019, 17:17 [ТС] | 3 | |||||
FFPowerMan, думаю, Ваша правка справедлива.
Есть еще предложения ?
0
|
443 / 329 / 172
Регистрация: 01.07.2015
Сообщений: 1,162
|
|
18.02.2019, 19:56 | 4 |
использовать нормальный генератор случайных чисел. rand() плохо справляется в зависимости от платформы с большими числами
+ можно заменить всю эту канитель на стандартную функцию shuffle
1
|
33 / 32 / 9
Регистрация: 16.04.2015
Сообщений: 275
|
|
18.02.2019, 20:29 | 5 |
Нормально(для препода сойдёт).
0
|
213 / 160 / 52
Регистрация: 09.12.2017
Сообщений: 520
|
|
18.02.2019, 20:32 [ТС] | 6 |
спасибо за интересную статью.
по условию, нужно написать свою функцию ![]()
0
|
![]() 25474 / 15861 / 3393
Регистрация: 24.12.2010
Сообщений: 34,718
|
|
18.02.2019, 21:09 | 7 |
JohnBlack123, вот тут есть много интересного
Генерация массива целых случайных чисел, которые не повторяются Добавлено через 2 минуты А еще обратите внимание на эту тему Генератор случайных чисел без повторений Там в посте 11 есть кое-что интересное.
1
|
213 / 160 / 52
Регистрация: 09.12.2017
Сообщений: 520
|
|
18.02.2019, 21:10 [ТС] | 8 |
Байт, спасибо!
А как Вам моя реализация ? Меня немного смущает мое условие проверки (b - a + 1) < length . Придумал второпях.Верное ли оно или можно придумать лучше ?
0
|
![]() 25474 / 15861 / 3393
Регистрация: 24.12.2010
Сообщений: 34,718
|
|
18.02.2019, 21:24 | 9 |
Не очень. Она неправильна математически. При таких перестановках вы не получите равновероятные результаты. Это не вникая в детали реализации.
Тут все нормально. Если данное условие выполняется, то задача просто не имеет решения.
1
|
213 / 160 / 52
Регистрация: 09.12.2017
Сообщений: 520
|
||||||
18.02.2019, 21:43 [ТС] | 10 | |||||
Байт, спасибо. Сделал вот так, как Вы написали в ответах на другую тему :
Может тогда сделать проверку на это условие : (b - a + 1) < length внутри функции, как считаете?
0
|
![]() 25474 / 15861 / 3393
Регистрация: 24.12.2010
Сообщений: 34,718
|
|
18.02.2019, 22:17 | 11 |
Штука в том, что предложенные там алгоритмы предполагают, что размер массива = длине интервала. А у вас это не обязательно. Выход такой. Сделать величину массива равной величине интервала.
arr = new int [b-a+1]; и уже заполнять этот массив. Последние элементы (с индексами >= length) никому не нужны. И выводить ты должны до length. Но их присутствие в массиве необходимо для правильной работы алгоритма. Добавлено через 6 минут Конечно, если величина интервала здорово больше величины массива, тут возникают потери и в памяти, и во времени. И надо искать другой алгоритм. Там по 1-й ссылке Генерация массива целых случайных чисел, которые не повторяются есть вполне приличные алгоритмы. Кроме самого первого, основанного на случайных обменах (как у вас в первой попытке ![]()
1
|
18.02.2019, 22:17 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Как заполнить одномерный массив случайными существенными числами в диапазоне?
Заполнить массив случайными числами в диапазоне (6, 32), вывести в строку, упорядочить вставкой Случайным образом заполнить двумерный массив фиксированного размера целыми числами в заданном диапазоне Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |