解题思路:

将每张牌的牌面花色存储在字符数组中,每种牌面的倒数第二个字符都是不同的,因而只需要比较倒数第二个字符来比较牌面大小。


参考代码:

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
	int n;
	cin>>n;
	char paimian[13]={'1','2','3','4','5','6','7','8','9','0','J','Q','K'};  //牌面花色的倒数第二个字符 
	for(int i = 0; i < n; i ++)
	{
		char w, card1[3], card2[3];
		cin >> w >> card1 >> card2;           //读取每组数据的王牌花色以及两张牌的牌面花色 
		int len_1 = strlen(card1), len_2 = strlen(card2);   //牌面花色的倒数第一个字符是花色, 
		
		bool flag1 = 0, flag2 = 0;
		if(w == card1[len_1 - 1]) flag1 = 1;   
		if(w == card2[len_2 - 1]) flag2 = 1;     //判断两张牌的花色是不是王牌花色 
			                                        
		if(flag1 && (!flag2)) cout<<"YES"<<endl;   //判断是否其中一张牌的花色是王牌花色而另一张牌的花色不是 
		else if((!flag1) && flag2) cout<<"NO"<<endl;  //如果第一张牌的花色大则输出"YES",第二张牌的花色大则输出"NO"
		                                             
		else{                                   //如果花色一样大则比较牌面大小 
			for(int q = 12; q >= 0; q --) {    //从大到小遍历牌面,判断牌面是否与两张卡的牌面一样 
				if(card2[len_2 - 2] == paimian[q]){ //先判断是否与第二张牌一样
					cout << "NO" << endl;   //如果一样,说明第二张牌的牌面比第一张牌大或者和第一张牌一样
					                      //既第一张牌不比第二张牌大,输出"NO" 
					break;             
				}
				else if(card1[len_1 - 2] == paimian[q]){   //后判断是否与第一张牌一样
					cout << "YES" << endl;   //如果一样,第一张牌一定比第二张牌大,输出"YES" 
					break;
				}
			}
		}
	}
	return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论