[C/C++ 演算法]- 洗撲克牌(亂數排列)


剛才找資料時發現一個C/C++的教學網站,趕快發揮(C/P)的長才將它備份來,有需要的同好,歡迎來(C/P)一下^^。

拷貝來源:
http://openhome.cc/Gossip/AlgorithmGossip/
http://openhome.cc/Gossip/AlgorithmGossip/ShuffleCard.htm

#include 
#include 
#include 
#include 
#define N 52

typedef struct {
char suit[3];
char symbol[3];
} Card;
void shuffle(Card*);
void card(int, char*);
void suit(int, char*);
void symbol(int, char*);
int main(void) {
srand(time(0));
Card cards[N];
shuffle(cards);
int i;
for(i = 0; i < N; i++) {
printf("%s%s%c", cards[i].suit, cards[i].symbol,
(i + 1) % 13 ? ' ' : '\n');
}
return 0;
}
void shuffle(Card* cards) {
int i;
for(i = 0; i < N; i++) {
suit(i + 1, cards[i].suit);
symbol(i + 1, cards[i].symbol);
}
for(i = 0; i < N; i++) {
int j = rand() % 52;
Card tmp = cards[i];
cards[i] = cards[j];
cards[j] = tmp;
}
}
void suit(int number, char* suit) {
switch((number - 1) / 13) {
case 0: strcpy(suit, "桃"); break;
case 1: strcpy(suit, "心"); break;
case 2: strcpy(suit, "磚"); break;
case 3: strcpy(suit, "梅");
}
}
void symbol(int number, char* symbol) {
int remain = number % 13;
switch(remain) {
case 0:  sprintf(symbol, "%c ", 'K'); break;
case 1:  sprintf(symbol, "%c ", 'A'); break;
case 11: sprintf(symbol, "%c ", 'J'); break;
case 12: sprintf(symbol, "%c ", 'Q'); break;
default: sprintf(symbol, "%-2d", remain);
}
}
相關文章