我对数组进行了洗牌,但现在我需要一个函数来按照洗牌顺序从数组中抽取一张牌。我似乎不知道如何抽出这副牌中的下一张牌。每次抽牌时如何递增到下一张牌?我会使用某种计数器吗?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 52
void initDeck();
void shuffle();
int draw(int d[]);
int deck[SIZE];
int sdeck[SIZE];
int main()
{
initDeck();
shuffle();
return 0;
}
void initDeck(){
int i = 0;
for(i; i < SIZE; i++){
deck[i] = i + 1;
}
}
void shuffle(){
srand(time(NULL));
int i = 0;
for(i; i < SIZE; i++){
sdeck[i] = deck[i];
}
i = 0;
for(i = SIZE; i > 0; i--){
int j = rand() % (i + 1);
int temp = sdeck[i];
sdeck[i] = sdeck[j];
sdeck[j] = temp;
}
for(i = 0; i < SIZE; i++){
printf("%d,", sdeck[i]);
}
}
/**int draw(int d[]){
int k=0;
k = d[k];
return(k);
}**/
最佳答案
int sdeck[SIZE];
int num_dealt = 0;
. . .
void shuffle() {
. . .
num_dealt = 0;
}
int draw() {
int c = sdeck[num_dealt];
num_dealt += 1;
return c;
}
下一步是使牌组成为一个包含卡片和计数的结构,并将该结构传递给draw()而不是使用全局变量。
关于c - 如何在C中从甲板上抽牌而不重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58547777/