c言語によるアナログシャッフルの実現
16218 ワード
まずトランプを保存します
2つの方法があります出力ごとに乱数が生成され、出力されるのはこの乱数に対応するカード欠陥である--乱数を生成する数が増加するにつれて、新しい乱数が発生した乱数と同じになる可能性がますます大きくなり、アルゴリズム遅延問題 が発生する可能性がある.は52枚のカードと札面を順番に排出し、ランダムに乱す.ループ毎に0~51の乱数jが生成され、resultの中の法列番号result[i]とランダムに選択されたresult[j]とが交換される.この方法はより効率的である
完全なコード
struct s PAI
{
char suit[10]; //
char face[10]; //
}card[52]; // 52
int i;
for(i=;i<52;i++)
{
strcpy(card[i].suit,pSuit[i/13]);
strcpy(card[i].face,pFace[i%13]);
}
char *pSuit[]={"Spades","Hearts","Clubs","Diamonds"};
cahr *pFace[]={"A","2","3","4","5,"6","7","8","9","10","Jack","Queen","King"};
2つの方法があります
void Initialize(int result[]) //
{
int i;
for(i=0;i<52;i++)
{
result[i]=i;
}
}
void Shuffle(int result[])
// ,
{
int i,j,temp;
srand(time(NULL));
for(i=0;i<52;i++)
{
j=rand()%52;
temp=result[i];
result[i]=result[j];
result[j]=temp;
}
}
完全なコード
#include
#include
#include
#include
typedef struct card
{
char suit[10]; //
char face[10]; //
}CARD;
void Initialize(int result[]) //
{
int i;
for(i=0;i<52;i++)
{
result[i]=i;
}
}
void Shuffle(int result[]) // ,
{
int i,j,temp;
srand(time(NULL));
for(i=0;i<52;i++)
{
j=rand()%52;
temp=result[i];
result[i]=result[j];
result[j]=temp;
}
}
void FillCard(CARD card[]);
void Deal(CARD card[], int result[]); //
void Initialize(int result[]); //
void Shuffle(int result[]); // ,
main()
{
CARD card[52];
int result[52];
FillCard(card); // card
Initialize(result); // result
Deal(card,result); //
Shuffle(result); //
printf(" :
");
Deal(card,result); //
}