求一个模拟人工洗牌的程序,用c++编写,谢谢!!!

来源:百度知道 编辑:UC知道 时间:2024/06/19 05:05:45
编写一个模拟人工洗牌的程序,将洗好的牌分别发给四个人。
使用结构card 来描述一张牌,用随机函数来模拟人工洗牌的过程,最后将洗好的52张牌顺序分别发给四个人。
对每个人的牌要按桥牌的规则输出。即一个人的牌要先按牌的花色(顺序为梅花、方块、红心和黑桃)进行分类,同一类的牌要再按A、K、Q、J、…、3、2牌的大小顺序排列。另发牌应按四个人的顺序依次分发。

#include <memory.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

const int NUM = 52;
const int DECK = 13;
enum SortType {SUIT, VALUE};
typedef struct CARD
{
int suit; // 取值0 - 3,分别表示梅花、方块、红心和黑桃
int value; // 取值2 - 10、J(11)、Q(12)、K(13)、A(14)
} Card;

void suffle(Card *cards)
{
int i, j, t;
Card c;
srand(time(NULL));

for (i = 0; i < NUM; ++i)
for (j = 0; j < NUM; ++j)
{
t = rand() % NUM;

if (j != t)
{
memcpy(&c, &cards[t], sizeof(Card));
memcpy(&cards[t], &cards[j], sizeof(Card));
memcpy(&cards[j], &c, sizeof(Card));
}
}
}

void sort(Card *cards, int size, SortType stype)
{
int i, j, k;
Card t;

for (i = 0; i < size-1; ++i)
{
k = i;

for (j = i + 1; j