原题链接:王牌花色
解题思路:
将每张牌的牌面花色存储在字符数组中,每种牌面的倒数第二个字符都是不同的,因而只需要比较倒数第二个字符来比较牌面大小。
参考代码:
#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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复