(1) 假定一副新扑克牌的顺序为:大王、小王、黑桃A,2,3,…,T,J,Q,K、红心A,2,3,…,T,J,Q,K、方块A,2,3,…,T,J,Q,K、梅花A,2,3,…,T,J,Q,K。现将两副扑克牌摞放在一起,然后将最上面的一张牌舍去,将之后的一张牌移到整副牌的最下面,重复此过程。问:最后剩下的是哪张牌?
(2) 设置一个足够大的数组然后将牌放入数组中,按照规则直到剩到最后一张牌
(3) 源程序代码
/************************************
扑克牌问题
输入:
输出:牌的数字及花色
**************************************/
#include<stdio.h>
//int find(Card deck[]);
typedef struct card
{
int suit; //花色 1:黑 2:红 3:花 4:片 5 :大王 6:小王
char face; //牌面
}Card;
int find(Card deck[]);
int main(void)
{
int j,k;
int i=0;
char face[]={'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
Card deck[5000]; //主牌组
for(i=0;i<5000;i++)
{
deck[i].suit=0; //牌组初始化
}
deck[0].suit=5;
deck[1].suit=6;
deck[54].suit=5;
deck[55].suit=6;
i=0;
while(i<2)
{
for(j=1;j<=4;j++)
{
for(k=0;k<13;k++)
{
deck[(54*i)+2+(j-1)*13+k].face=face[k];
deck[(54*i)+2+(j-1)*13+k].suit=j;
}
}
i++;
}
k=find(deck);
printf("牌的花色是%d",deck[k].suit);
printf("牌的点数是%c",deck[k].face);
}
/************************************
扑克牌问题
输入:一个数组
输出:最后牌的数组的位置
**************************************/
int find(Card deck[])
{
int i=0;
int j=0;
for(i=0;;)
{
if(deck[i+2].suit==0)
{
break;
}else
{
deck[108+j]=deck[i+1];
j++;
i=i+2;
}
}
return i+1;
}