思路很简单,这里主要注意数据结构的选择,因为卡牌是字母+数字,无论存储还是使用起来都不方便。于是可以将卡牌转化成实数保存到Card数组,100到400分别对应不同的花色。输出时解码转化即可。
这里注意order数组一定要进行初始化,初始的顺序也就是下标顺序。
#include<cstdio>
int Table[54];
int Order[54];//order数组一定要初始化
int Card[54];
char code[5] = {'S','H','C','D','J'};
void DecideOrder(int n)//确定n次洗牌映射表
{
int i = 53;
//初始化order数组
while(i >= 0)
{
Order[i] = i;
i--;
}
while(n > 0)
{
i = 53;
while(i >= 0)
{
Order[i] = Table[Order[i]];
i--;
}
n--;
}
}
void Suffle()//洗牌后的结果
{
int count = 0;
int color = 0;
for(int i = 0; i < 4; i++)
{
for(int k = 1; k <= 13; k++)
Card[Order[count++]] = color * 100 + k;
color++;
}
Card[Order[52]] = 401;
Card[Order[53]] = 4