很多人都要在為撲克牌隨機函數(shù)頭痛,主要想在函數(shù)的死胡同里。我們要做的是初始化數(shù)組,然后隨機數(shù)組的序數(shù)。
本例用八副牌做演示。
#include <stdio.h>
#include<time.h>
#include<stdlib.h>
//隨機洗牌函數(shù)
void SortCark(char *cark,int len) {
int n;
char k,*p,*p1;
p=cark;
for (int i=0;i<len;i++) {
n=(int)(rand()%len);
k=*p;
p1=cark;
p1+=n;
*p=*p1;
*p1=k;
p++;
}
}
//排序函數(shù)
void Sort(char *cark,int len) {
char k,*p,*p1;
int j,i;
for(j=0;j<len-1;j++)
for (i=0;i<len-1-j;i++) {
p1=cark+1+i;
p=cark+i;
if (*p>*p1) {
k=*p;
*p=*p1;
*p1=k;
}
}
}
void main() {
char cark[8][52]={0};
char t[4]={'@','#','*','^'};//八副牌用四種符號表示
int m=0,n=0;
srand((int)time(0));//初始隨機函數(shù)
//初始牌
for (int i=0;i<8;i++)
for (int l=0;l<52;l++) {
cark[i][l]=l;
}
//洗牌
SortCark(&cark[0][0],8*52);
//查看洗牌的結(jié)果
for ( i=0;i<8;i++)
for (int l=0;l<52;l++) {
m=cark[i][l] % 13;
n=l % 13;
if (n==0) printf("\n\r");
n=cark[i][l] / 13;
printf(",%c%d",t[n],m);
}
printf("\n\r");
//查看排序后的結(jié)果
Sort(&cark[0][0],8*52);
for ( i=0;i<8;i++)
for (int l=0;l<52;l++) {
n=l % 4;
if (n==0) printf("\n\r");
printf(",%d",cark[i][l]);
}
}
浙公網(wǎng)安備 33010602011771號