Я студент и посередине среднего проекта. Я не ищу, чтобы люди кодировали это для меня, но мне нужна помощь с его частью. Я пытаюсь сделать игру в блэкджек, и для этого я хочу установить список из 52 целых чисел [1,1,1,1,2,2,2,2 .....] по одному для каждой карты в колоде , Но как взять случайное число из списка и отменить его? Как обычная колода, как только вы берете карту, вы не можете ее перерисовать. Я знаю, что a может установить случайный параметр [n = rand()% 11 + 1] для программы, но я хочу идти выше и выше, чтобы получить AСлучайные номера из списка предустановок
ответ
Вы можете использовать алгоритм перетасовки, например: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle. Перемешивание Fisher-Yates начинается с массива, затем он переключает каждый элемент массива со случайным элементом из массива. Также можно удалять элементы по одному, но это сложнее. Вы можете удалять элементы по одному случайным образом, используя двоичное дерево. Храните общее количество элементов под каждым узлом. Каждый раз, чтобы удалить элемент, создайте случайное число, большее или равное 0, и меньшее количество оставшихся элементов. Начните с корня. Перейдите к левому ребёнку, если a меньше количества предметов под левым ребенком. В противном случае пусть a будет a- и переходит в правый ребенок. Сделайте это рекурсивно. Но удаление предметов один за другим сложнее. Лучше всего использовать алгоритм перетасовки.
Невозможно удалить случайный элемент из массива.
Вместо этого вы можете поменять произвольно выбранный элемент на последний элемент массива. Наряду с этим вам нужно будет хранить количество действительных элементов в массиве переменной array_size_valid
и уменьшать это значение каждый раз, когда происходит обмен.
Таким образом, вы случайная функция генерации индекса будет:
rand_index = rand() % array_size_valid;
Вот тривиальным образом: Скажем у вас есть массив, содержащий 52 целых чисел:
int deck[52];
и вы инициализировали его до нужного значения, например 1, 1, 1, 1, 2, 2, 2, 2, .....
Когда карта нарисована, установите соответствующий массив e lement до -1 (или любое другое значение, чем оригинальные):
int drawCard(int deck[])
{
do{
int randIndex = rand() % 52;
} while(deck[randIndex] == -1);
int drawnCard = deck[randIndex];
deck[randIndex] = -1;
return drawnCard;
}
Хотя этот подход не может быть достаточно эффективным, он работает, так что я думаю, что это может быть полезно для начинающих, как вы.
- 1. Случайные случайные номера нитей
- 2. случайные предметы из списка
- 3. Случайные номера в Unity3D?
- 4. Случайные номера не распечатываются
- 5. Случайные уникальные номера java
- 6. Выберите случайные элементы из списка
- 7. Получить случайные строки из списка
- 8. удаление номера из списка
- 9. добывающих номера из списка
- 10. Создание списка, который содержит случайные числа из другого списка
- 11. Генерировать случайные голландские номера IBAN
- 12. Создание предустановок проекта Eclipse
- 13. Возрастающие номера из списка, Excel
- 14. Печать номера из списка массивов
- 15. Получение номера из списка разделенных
- 16. Изображение предустановок в другой функции?
- 17. случайные элементы из списка ВО ВРЕМЯ добавления
- 18. случайные числа python из списка (x.difference)
- 19. Создать случайные номера для игры в лотерею
- 20. Как создать случайные числа без одинакового номера
- 21. ASP.NET Выпадающее меню из номера списка
- 22. Как удалить определенные номера из списка MySQL
- 23. Перестановка номера из списка в Python3
- 24. Элемент управления для выбора номера из списка
- 25. Haskell - номера печати из списка с текстом
- 26. Получить выделенные номера строк из списка
- 27. Получить номера с плавающей запятой из списка
- 28. Удаление номера из списка разделенных запятыми чисел
- 29. Несколько терминалов для выбора номера из списка
- 30. Как удалить номера из каждого элемента списка
Именно то, что я искал, спасибо. – jojobuddy13
@ jojobuddy13 Пожалуйста, примите этот ответ, если вы считаете, что он решает вашу проблему :) –
У этого есть возможность войти в бесконечный цикл. –