解题思路:
将每张牌的牌面花色存储在字符数组中,每种牌面的倒数第二个字符都是不同的,因而只需要比较倒数第二个字符来比较牌面大小。
参考代码:
#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 人评分
printf基础练习2 (C语言代码)浏览:764 |
人见人爱A+B (C语言代码)浏览:766 |
人见人爱A+B (C语言代码)浏览:779 |
点我有惊喜!你懂得!浏览:3875 |
2005年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:584 |
C语言程序设计教程(第三版)课后习题6.5 (Java代码)浏览:1108 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:572 |
C语言训练-角谷猜想 (C++代码)(3N+1问题)浏览:1745 |
2005年春浙江省计算机等级考试二级C 编程题(3) (C语言代码)浏览:388 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:624 |