(😉如果觉得好,请给个免费的赞噢~🌹🌹🌹)
背景:两个人每人发3张牌(各从一副牌中),每张牌包括花色(红桃(Heart)>黑桃(Spade)>方块(Diamond)>梅花(Club))和大小(从小到大依次是:2-10、J、Q、K、A),谁手上有最大的一张或多张(如果有相同的牌)牌谁获胜。
输入:A的3张牌(未排序)和B的3张牌(未排序)。(参见用例)
输出:A的3张牌的排序后的输出和B的3张牌的排序后的输出,以及A和B谁获胜。(参见用例)
#include<stdio.h>
#include<string.h>
struct ptn{//定义结构ptn
char x[4];//数组x用来保存花色和大小的组合
int value;
};
typedef struct ptn ptn;
int main(){
ptn a[2][3],tmp;// a[0]对应A的三张牌,a[1]对应B的三张牌
int i,j,k;
//把六张牌的value初始化为0
for(i=0;i<2;i++){
for(j=0;j<3;j++){
a[i][j].value=0;
}
}
//输入两人的牌
for(j=0;j<2;j++){
for(i=0;i<3;i++){
scanf("%s",a[j][i].x);
}
}
//检查是否有相同的牌
for(j=0;j<2;j++){
if(strcmp(a[j][0].x,a[j][1].x)==0||strcmp(a[j][1].x,a[j][2].x)==0||strcmp(a[j][2].x,a[j][0].x)==0){
printf("Input Error!\n");
return 0;
}
}
//计算两人的三张牌的各自的“价值”
for(j=0;j<2;j++){
for(i=0;i<3;i++){
//由花色赋值
if(a[j][i].x[0]=='C'){
a[j][i].value+=100;
}else if(a[j][i].x[0]=='D'){
a[j][i].value+=200;
}else if(a[j][i].x[0]=='S'){
a[j][i].value+=300;
}else if(a[j][i].x[0]=='H'){
a[j][i].value+=400;
}else{
printf("Input Error!\n");
return 0;
}
//由大小赋值
if(a[j][i].x[1]>=50&&a[j][i].x[1]<=57){//当大小在2~9之间时
a[j][i].value+=(int)a[j][i].x[1]-48;
}else if(a[j][i].x[1]=='1'&&a[j][i].x[2]=='0'){
a[j][i].value+=10;
}else if(a[j][i].x[1]=='J'){
a[j][i].value+=11;
}else if(a[j][i].x[1]=='Q'){
a[j][i].value+=12;
}else if(a[j][i].x[1]=='K'){
a[j][i].value+=13;
}else if(a[j][i].x[1]=='A'){
a[j][i].value+=14;
}else{
printf("Input Error!\n");
return 0;
}
}
}
//给两人的牌排序(冒泡)
for(k=0;k<2;k++){
for(i=0;i<2;i++){
for(j=0;j<2-i;j++){
if(a[k][j].value<a[k][j+1].value){
tmp=a[k][j+1];
a[k][j+1]=a[k][j];
a[k][j]=tmp;
}
}
}
}
//判断两人牌的大小:k作为标记量。k=0,A胜;k=1,B胜;k=2,平。
if(a[0][0].value!=a[1][0].value){
k=a[0][0].value>a[1][0].value?0:1;
}else if(a[0][1].value!=a[1][1].value){
k=a[0][1].value>a[1][1].value?0:1;
}else if(a[0][2].value!=a[1][2].value){
k=a[0][2].value>a[1][2].value?0:1;
}else{
k=2;
}
//print winner
switch(k){
case 0:printf("Winner is A!\n");break;
case 1:printf("Winner is B!\n");break;
case 2:printf("Winner is X!\n");break;
}
//print the sequence
printf("A: %s %s %s\n",a[0][0].x,a[0][1].x,a[0][2].x);
printf("B: %s %s %s\n",a[1][0].x,a[1][1].x,a[1][2].x);
return 0;
}