解题思路:
将每张牌的牌面花色存储在字符数组中,每种牌面的倒数第二个字符都是不同的,因而只需要比较倒数第二个字符来比较牌面大小。
参考代码:
#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语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:700 |
母牛的故事 (C语言代码)浏览:738 |
C语言程序设计教程(第三版)课后习题3.7 (C++代码)浏览:988 |
模拟计算器 (C语言代码)浏览:882 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:691 |
WU-输出正反三角形 (C++代码)浏览:1018 |
单词个数统计 (C语言代码)浏览:1009 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:542 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:563 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:1286 |