假设有52张扑克牌,分为黑桃,红心,梅花,方块四种花色,每种花色又有从A、2… K共13张牌。若规定扑克牌的大小先以花色优先(即,黑桃>红心>梅花>方块),再以点数(即,A<2<3…<10<J<Q<K)来判大小。请编写程序,模拟两个人出牌(两人各处一张牌),判断出哪张牌大。例如:甲出牌“梅花6”,乙出牌“红心2”,则判定乙的牌大。
解答如下
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define MaxDecor 4
#define MaxPoint 13
#define MaxNum 52
struct poker
{
int Decor;
int Point;
};
char dector[MaxDecor][6]={"方块","梅花","红心","黑桃"};
char point[MaxPoint][3]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
void randpoker(struct poker t[],int n)
{
for(int i=0;i<n;i++)
{
t[i].Decor=rand()%MaxDecor;
t[i].Point=rand()%MaxPoint;
}
}
void test(struct poker t[],int n)
{
srand((unsigned)time(NULL));
int a=rand()%n;
int b=rand()%n;
printf("甲出:%s%s\n",dector[t[a].Decor],point[t[a].Point]);
printf("乙出:%s%s\n",dector[t[b].Decor],point[t[b].Point]);
if(a!=b)
{
if(t[a].Decor>t[b].Decor)
{
printf("甲大\n");
}
else if(t[a].Decor<t[b].Decor)
{
printf("乙大\n");
}
else
{
if(t[a].Point>t[b].Point)
{
printf("甲大\n");
}
else if(t[a].Point<t[b].Point)
{
printf("乙大\n");
}
}
}
else
{
printf("一样大\n");
}
}
int main()
{
struct poker t[MaxNum];
randpoker(t,MaxNum);
for(int i=0;i<10;i++)
{
test(t,MaxNum);
Sleep(1000);
printf("\n");
}
return 0;
}
简单写了下,供参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *pka[4]= {"方块","梅花","红心","黑桃"};
char card[13]= {'A','1','2','3','4','5','6','7','8','9','J','Q','K'};
int findCard(char c)
{
for(int i=0; i<13; i++)
if(card[i]==c)
return i;
return -1;
}
int findPK(char *c)
{
for(int i=0; i<4; i++)
if(strcmp(pka[i],c)==0)
return i;
return -1;
}
int main()
{
int a1,b1,a2,b2,re;
char pk1[10],pk2[10],card1,card2;
scanf("%s%s",pk1,pk2);
card1=pk1[4];
card2=pk2[4];
pk1[4]=pk2[4]='\0';
printf("甲出牌\"%s%c\"\n",pk1,card1);
printf("乙出牌\"%s%c\"\n",pk2,card2);
a1=findPK(pk1);
b1=findCard(card1);
a2=findPK(pk2);
b2=findCard(card2);
if(a1==-1 || a2==-1 || b1==-1 || b2==-1)
{
printf("输入错误\n");
exit(1);
}
if(a1==a2)
{
if(b1>b2)
b1=1;
else
b1=0;
}
else if(a1>a2)
b1=1;
else
b1=0;
if(b1)
printf("甲的牌大\n");
else
printf("乙的牌大\n");
return 0;
}