(BOSS)Poker time (使用结构)

(😉如果觉得好,请给个免费的赞噢~🌹🌹🌹)

 

背景:两个人每人发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;
} 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值