Member 13348980 Ответов: 5

Как мне получить число 10 от 1 до 20?


Эй, я хочу знать, как получить 10 случайных чисел, но от 1 до 20 и каждый раз, когда 10 нет. Должна отличаться.
Как 2,8,11,14,4,7,9,18,14,20
Число не должно повторяться
И сохраните значение в массиве[ ]

Что я уже пробовал:

Я попробовал команду rand, но она дает мне случайное число, а не число от 1 до 20, и я не могу его сохранить

5 Ответов

Рейтинг:
27

Graeme_Grant

Альтернативным [творческим] решением является случайная перетасовка набора чисел. Таким образом, повторений не будет... ;)

Этот поиск Google имеет много различных способов сделать это: массива c++ случайном порядке [^]


CPallini

5.

Graeme_Grant

Спасибо... Код написали другие, так что мне не было смысла это делать. Кроме того, есть гораздо больше вариантов с этой ссылкой... ;)

Рейтинг:
1

CPallini

Прямое решение, как уже было предложено Grame_Grant, используя силу C++ стандартная библиотека: random_shuffle-ссылка на C++ [^].

С другой стороны, если вы хотите реализовать сам алгоритм, то я опишу его здесь: Случайное извлечение 5 карт из колоды[^].


Graeme_Grant

5+ :)

Рейтинг:
1

Patrice T

Есть в основном 2 решения:
1) Выберите случайное число столько раз, сколько вы хотите. Недостатком является то, что вы должны сверяться с ранее выбранными числами, чтобы избежать повторения. Эта техника вырождается, когда вы хотите больше чисел, в худшем случае, если вы хотите, чтобы 20 чисел не повторялись в списке из 20.

2) вторая техника-перетасовка: составьте список из всех 20 чисел, которые вы хотите.
Затем выберите число от 0 до 19 и поменяйтесь местами с первым элементом списка.
Затем выберите число от 1 до 19 и поменяйтесь местами со вторым элементом списка. ...
Это немного сложнее,но это не вырождается. Это техника выбора, чтобы перетасовать колоду карт.


Nelek

Я действительно согласен с суффле как более эффективным, но для домашнего задания это немного чересчур продвинуто ;)

Patrice T

Вероятно, это вопрос мышления / симпатии ОП.

Nelek

Больше проблема мышления / симпатии учителя; Р

Patrice T

возможно :)

Рейтинг:
0

Nelek

Чтобы вызвать случайное число от 1 до 20, просто используйте Решение №1

Но ... чтобы было безопаснее...

0) Create an empty result_array for your 10 result numbers
1) Fill one check_array[20] with numbers from 1 to 20 to track what has been used

2) within a loop until you get the 10 random numbers without repetition
   2.1) call the random function of solution #1
   2.2) check if the number has been already used (is this number still in the array of (1)?)
      2.2.1) If yes... save the random number to the next empty position of your results array and put a "0" in that check_array's position
      2.2.2) if not... start 2 again

   2.3) if you already have all 10 non-repeated numbers... end loop

3) Print out your results


Рейтинг:
0

OriginalGriff

Попробуй

x = (rand() % 20) + 1;