Перетасовывать колоду карт?

я очень новичок в C ++, и я до сих пор не рассмотрел основные понятия, но мой профессор хочет, чтобы мы написали алгоритм для перемешивания и отображения колоды карт, и колода должна быть представлена ​​в виде двумерного массива.

Однако у меня возникли проблемы с симуляцией колоды карт!

#include <iostream>
#include <vector>

using namespace std;

int main() {
vector<char> deck;
char suit[] = {'h','d','c','s'};
char card[] = {'2','3','4','5','6','7','8','9','T','J','Q','K','A'};
for (int j=0; j<13; j++) {
for (int i=0; i<4; i++) {
deck.push_back(card[j] suit[i]);
}
}

return 0;
}

Я видел много карточных программ с классами, но я даже не уверен, будем ли мы изучать их в этом семестре.

0

Решение

Используя простую структуру, вы можете редактировать свой код следующим образом:

#include <iostream>
#include <vector>

using namespace std;

struct Card {
char suit, number;
Card(char aSuit, char aNumber) : suit(aSuit), number(aNumber) { }
};

int main() {
vector<Card> deck;
char suit[] = {'h','d','c','s'};
char num[] = {'2','3','4','5','6','7','8','9','T','J','Q','K','A'};
for (int j=0; j<13; j++) {
for (int i=0; i<4; i++) {
deck.push_back(Card(suit[i], num[j]);
}
}

// now, deck[0] to deck[51] hold all the cards
// first card's suit is deck[0].suit, number is deck[0].number

return 0;
}
2

Другие решения

Как предлагается в комментариях, вы должны использовать структуру для представления карты. Смотри например Эта статья

Для алгоритма перемешивания есть подсказка: если вы можете перемешать колоду из n-1 карт, можете ли вы перемешать колоду из n карт?

0

Зачем усложнять?

Колода карт содержит 52 элемента. Каждый элемент может быть обозначен двумя символами. Как уже упоминалось в вашем посте, костюм и (если не сказать лучшего слова) номер. Построить этот массив. Вам не нужно расходовать векторы и т. Д. Размер массива фиксирован. 52 предмета, каждый предмет 2 символа.

Затем запустите цикл, который будет выглядеть столько раз, сколько вы хотите.

Каждый раз в цикле выбирали два элемента в диапазоне от 0 до 51 (помните, что в мире C ++ все начинается с нуля). Эти два числа являются случайными (см. рант). Поменяйте их местами (оба символа — или предпочтительно используйте struct).

0

Иди почитай Джон Бентли Программирование Жемчуг. В первой главе описан алгоритм генерации случайных перестановок. Алгоритм генерирует каждую перестановку с равной вероятностью, и, более того, к концу чтения вы поймете почему.

Его алгоритм использует один индекс для перестановки. В вашем случае используйте N = 52 и сгенерируйте два ваших индекса по (целочисленному) коэффициенту и остатку после деления на 4. Коэффициент дает вам карточный индекс; остаток дает вам костюм.

0
По вопросам рекламы [email protected]