я очень новичок в 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;
}
Я видел много карточных программ с классами, но я даже не уверен, будем ли мы изучать их в этом семестре.
Используя простую структуру, вы можете редактировать свой код следующим образом:
#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;
}
Как предлагается в комментариях, вы должны использовать структуру для представления карты. Смотри например Эта статья
Для алгоритма перемешивания есть подсказка: если вы можете перемешать колоду из n-1 карт, можете ли вы перемешать колоду из n карт?
Зачем усложнять?
Колода карт содержит 52 элемента. Каждый элемент может быть обозначен двумя символами. Как уже упоминалось в вашем посте, костюм и (если не сказать лучшего слова) номер. Построить этот массив. Вам не нужно расходовать векторы и т. Д. Размер массива фиксирован. 52 предмета, каждый предмет 2 символа.
Затем запустите цикл, который будет выглядеть столько раз, сколько вы хотите.
Каждый раз в цикле выбирали два элемента в диапазоне от 0 до 51 (помните, что в мире C ++ все начинается с нуля). Эти два числа являются случайными (см. рант). Поменяйте их местами (оба символа — или предпочтительно используйте struct
).
Иди почитай Джон Бентли Программирование Жемчуг. В первой главе описан алгоритм генерации случайных перестановок. Алгоритм генерирует каждую перестановку с равной вероятностью, и, более того, к концу чтения вы поймете почему.
Его алгоритм использует один индекс для перестановки. В вашем случае используйте N = 52 и сгенерируйте два ваших индекса по (целочисленному) коэффициенту и остатку после деления на 4. Коэффициент дает вам карточный индекс; остаток дает вам костюм.