给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。(二)

2014-11-24 03:28:18 · 作者: · 浏览: 1
从当前位置向后找到一个数组中的空位(循环扫描)
int findFreePosition(int * cards,int currentPosition)
{
int p=currentPosition;
while(*(cards+p)!=0)
{
p=(p+1)%CARDS_NUM;
}
return p;
}

//在数组中的某个问题插入某张牌
int * insertCard(int *cards,int currentPosition,int card)
{
int p=0;
p=findFreePosition(cards,currentPosition);
*(cards+p)=card;
return cards;
}

void main()
{
int i=0;
int randPosition=0;
int cards[CARDS_NUM]={0}; //有序牌
int randCards[CARDS_NUM]={0}; //无序牌

printf("一副牌有54张牌:1——13表示黑桃;14——26表示红桃;\n");
printf(" 27——39表示梅花;40——52表示方块;\n");
printf(" 51表示小王;52表示大王。\n\n");

createCards(cards);
printf("原始有序牌为:\n");
printCards(cards);

srand(time(0)); //生成的随机数每次都保证不一样
for(i=0;i {
randPosition=rand()%54;
insertCard(randCards,randPosition,cards[i]);
}
printf("\n随机洗牌后的结果是:\n");
printCards(randCards);
}

第一次洗牌:

\

第二次洗牌:


\