原题链接:王牌花色
解题思路:
将每张牌的牌面花色存储在字符数组中,每种牌面的倒数第二个字符都是不同的,因而只需要比较倒数第二个字符来比较牌面大小。
参考代码:
#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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复