CF106A Card Game 题解

Content

一种纸牌游戏有许多张卡牌,每张卡牌有一个套装(SHDC)和一个等级(按升序排列6789TJQKA)。 规定以下情况卡牌 A 才能赢卡牌 B:

  • A 有王牌套装,B 没有。
  • A 和 B 的套装相同,但 A 的等级比 B 高。

否则 B 赢。

现在,给出王牌套装和卡牌 A、卡牌 B,问卡牌 A 是否能赢卡牌 B。

数据范围:保证输入合法。

Solution

我们先按照题目所给的顺序求出卡牌 A 和卡牌 B 的等级,不妨设 T 为 10,J 为 11,Q 为 12,K 为 13,A 为 14,其他照旧。然后就是一波 if-else 判断了。

先判断 A 是否有王牌套装,如果 A 有,判断 B 是否有。如果 B 没有那就 A 赢,如果 B 也有而 A 的等级比 B 大,那么还是 A 赢,否则 B 赢。

如果 A 没有王牌套装,那么判断 B 是否有,如果 B 有那就 B 赢;否则看它们两张卡牌是否是同一个套装。如果不是同一个套装则 B 赢(这里特别注意!),是同一个套装就比较它们的等级。如果 A 的等级比 B 大,那么 A 赢,否则 B 赢。

Code

string king, a, b;

int main() {
	cin >> king >> a >> b;
	int a1 = (a[0] == 'T' ? 10 : (a[0] == 'J' ? 11 : (a[0] == 'Q' ? 12 : (a[0] == 'K' ? 13 : (a[0] == 'A' ? 14 : a[0] - '0'))))), b1 = (b[0] == 'T' ? 10 : (b[0] == 'J' ? 11 : (b[0] == 'Q' ? 12 : (b[0] == 'K' ? 13 : (b[0] == 'A' ? 14 : b[0] - '0')))));
	if(king[0] == a[1]) {
		if(king[0] == b[1]) {
			if(a1 > b1) puts("YES");
			else puts("NO");
		} else puts("YES");
	} else {
		if(king[0] == b[1]) puts("NO");
		else if(a[1] == b[1]) {
			if(a1 > b1) puts("YES");
			else puts("NO");
		} else puts("NO");
	}
	return 0;
}
posted @ 2021-12-16 11:39  Eason_AC  阅读(97)  评论(0)    收藏  举报