Другие языки программирования и технологии
С++, заполнение массива рандомными значениями.
Я студент второго курса, так что не объясняйтесь слишком сложно, пожалуйста. Дело вот в чем. Имеется массив из 52 элементов. Как его заполнить рандомными значениями таким образом, чтобы ни одно значение не повторялось? Я попробовал так : заполняем, при каждой генерации числа смотрим, есть ли такой элемент в массиве. Если есть, генерируем еще одно, если нет, то добавляем. Этот способ не подходит, слишком долго работает и иногда зависает. Есть еще какие-то способы?
Отправьте на почту ваш код.
Если 52 - это колода карт, то создайте базовый массив из 52 элементов типа int от 1 до 52, затем создайте временный массив того же размера - это будет копия базового, затем случайным образом выбираете элемент из копии, заносите его значение в третий массив, где хранятся результаты, а в копии меняете значение выбранного элемента по индексу на ноль. И так далее пока всё не обнулите. По желанию два последних элемента можно просто вытащить без случайностей. Естественно, выполняется проверка каждого, вновь выбранного, элемента на ноль. В C# я делал так и всё было быстро.
Если диапазон чисел больше, то и размеры базового массива и его копии должны, соответственно, увеличится.
Если диапазон чисел больше, то и размеры базового массива и его копии должны, соответственно, увеличится.
Судя по тому, что количество вариантов случайных чисел ограничено, ну и учитывая, что математически добиваться случайности чисел Вам не надо, то можно поступить так.
Создаёте массив 32768 элементов. Генерируете число (диапазон от 0 до 32767) и заносите 1 в ячейку массива, индекс, которой это случайное число, а само число по порядку в массив из 52 элементов.
Новое число, тоже будет индексом, но прежде, чем заносить, надо проверить на 1 этот элемент, если там 0, то на следующую итерацию, если нет, то увеличиваем число на 1 и опять проверяем ячейку (из 32678) на наличие 1, до тех пор, пока не найдём нулевую. Как только нашли, то этот индекс и будет являться следующим случайным значением, заносящимся в массив (из 52), а в ячейку массива (из 32768) с индексом равным полученному числу записываем 1. И так далее (кстати можно чередовать в одном случае увеличивать на 1, в другом уменьшать на 1, но не забывать про границы массива и переходить циклически)
Это уже будет достаточно быстро. Другие, более быстродействующие способы гораздо сложнее!
Создаёте массив 32768 элементов. Генерируете число (диапазон от 0 до 32767) и заносите 1 в ячейку массива, индекс, которой это случайное число, а само число по порядку в массив из 52 элементов.
Новое число, тоже будет индексом, но прежде, чем заносить, надо проверить на 1 этот элемент, если там 0, то на следующую итерацию, если нет, то увеличиваем число на 1 и опять проверяем ячейку (из 32678) на наличие 1, до тех пор, пока не найдём нулевую. Как только нашли, то этот индекс и будет являться следующим случайным значением, заносящимся в массив (из 52), а в ячейку массива (из 32768) с индексом равным полученному числу записываем 1. И так далее (кстати можно чередовать в одном случае увеличивать на 1, в другом уменьшать на 1, но не забывать про границы массива и переходить циклически)
Это уже будет достаточно быстро. Другие, более быстродействующие способы гораздо сложнее!
MSDN большой справочник Вам точно поможет!! ! скачайте в любом поисковике, весит много и долго будете искать, весит 2 гига!!!
Похожие вопросы
- помогите пожалуйста!!3.Напишите процедуру Input(A) для заполнения массива целых чисел A размером 10 x 10: 0 0 0 ...0 0
- В каждой из задач данного раздела заданы два массива случайных значении
- Помогите, пожалуйста, найти ошибки в коде. Нужно выбрать из массива минимальное значение и вывести индексы его позиции.
- Напишите программу, которая находит в массиве количество элементов, равных заданному значению X .
- С++. Как сделать, чтобы значение массива, созданного в структуре изменялось в другой процедуре?
- 1. Написать программу, которая заполняет массив целых чисел размеров 20 элементов значениями роста учащихся (случайные ч
- Как передать значение массива в аргумент? (ПЕРЕЗАЛИВ) с++
- Вывести последовательность из 6 элементов, чтобы значения выбирались случайно из массива , но при этом не повторялись с#
- С++ Как создать массив кортежей и записать значения
- C#. Элементы одномерного массива размером 7, которые больше среднего значения элементов массива, заменить на 0.