题目描述
到了晚饭时间,宅男小明和大明谁也不想下楼买饭,此时他们决定来一盘牛牛来决定胜负,谁输了谁去买饭。牛牛(不考虑花色只有A,2~9,10,J,Q,K)的规则如下:
每人5张牌,JQK为10点,不含大小王,没有花色,如果其中三张牌能组成10的倍数则为有牛,不能则为无牛,如果剩下两张如果还能组成10的倍数则为牛牛,不能则将剩下两张和对10取余,余数为几则牌为牛几(例如:JKQ56则为牛1)。
牛牛〉牛9〉牛8……牛1〉无牛;
一样大时比五张牌中最大的牌是什么,还一样则打平手。
输入
输入t有t组测试数据,每组测试数据有两行,第一行是大明的牌,第二行是小明的牌。
输出
输出谁赢,如果小明赢则输出1,大明赢则输出-1,平局则输出0。
样例输入
1
3 7 10 3 4
5 9 6 A 4
样例输出
-1
注意:
在用next-permutation的函数时,是从当前状态下继续全排列,前面要先用sort,不然会少掉前面的排序。
代码:
#include<bits/stdc++.h>
using namespace std;
int a1[5], a2[5];
int main() {
int t;
while (cin >> t) {
while (t--) {
int max1 = 0, max2 = 0;
for (int i = 0;i < 5;i++) {
string a;
int w = 0;
cin >> a;
int n = a.size();
for (int i = 0;i < n;i++) {
a[i] = toupper(a[i]);
}
if (a != "A" && a != "J" && a != "Q" && a != "K") {
a1[i] = atoi(a.c_str());
w = a1[i];
}
else {
if (a == "A") {
w = 1;a1[i] = 1;
}
else {
if (a == "J")w = 11;
if (a == "Q")w = 12;
if (a == "K")w = 13;
a1[i] = 10;
}
}
if (w > max1)max1 = w;
}
for (int i = 0;i < 5;i++) {
string a;
int n;
int w = 0;
cin >> a;
n = a.size();
for (int i = 0;i < n;i++) {
a[i] = toupper(a[i]);
}
if (a != "A" && a != "J" && a != "Q" && a != "K") {
a2[i] = atoi(a.c_str());
w = a2[i];
}
else {
if (a == "A") {
w = 1;a2[i] = 1;
}
else {
if (a == "J")w = 11;
if (a == "Q")w = 12;
if (a == "K")w = 13;
a2[i] = 10;
}
}
if (w > max2)max2 = w;
}
int x1 = 0, x2 = 0;
sort(a1, a1 + 5);
sort(a2, a2 + 5);
do {
int sum1 = a1[0] + a1[1] + a1[2];
int sum2 = a1[3] + a1[4];
if (sum1 % 10 == 0) {
if (sum2 % 10 == 0)x1 = 10;
else x1 = sum2 % 10;
break;
}
} while (next_permutation(a1, a1 + 5));
do {
int sum1 = a2[0] + a2[1] + a2[2];
int sum2 = a2[3] + a2[4];
if (sum1 % 10 == 0) {
if (sum2 % 10 == 0)x2 = 10;
else x2 = sum2 % 10;
break;
}
} while (next_permutation(a2, a2 + 5));
if (x1 > x2)cout << "-1" << endl;
else if (x1 < x2)cout << "1" << endl;
else {
if (max1 > max2)cout << "-1" << endl;
if (max1 < max2)cout << "1" << endl;
if (max1 == max2)cout << "0" << endl;
}
}
}
}
using namespace std;
int a1[5], a2[5];
int main() {
int t;
while (cin >> t) {
while (t--) {
int max1 = 0, max2 = 0;
for (int i = 0;i < 5;i++) {
string a;
int w = 0;
cin >> a;
int n = a.size();
for (int i = 0;i < n;i++) {
a[i] = toupper(a[i]);
}
if (a != "A" && a != "J" && a != "Q" && a != "K") {
a1[i] = atoi(a.c_str());
w = a1[i];
}
else {
if (a == "A") {
w = 1;a1[i] = 1;
}
else {
if (a == "J")w = 11;
if (a == "Q")w = 12;
if (a == "K")w = 13;
a1[i] = 10;
}
}
if (w > max1)max1 = w;
}
for (int i = 0;i < 5;i++) {
string a;
int n;
int w = 0;
cin >> a;
n = a.size();
for (int i = 0;i < n;i++) {
a[i] = toupper(a[i]);
}
if (a != "A" && a != "J" && a != "Q" && a != "K") {
a2[i] = atoi(a.c_str());
w = a2[i];
}
else {
if (a == "A") {
w = 1;a2[i] = 1;
}
else {
if (a == "J")w = 11;
if (a == "Q")w = 12;
if (a == "K")w = 13;
a2[i] = 10;
}
}
if (w > max2)max2 = w;
}
int x1 = 0, x2 = 0;
sort(a1, a1 + 5);
sort(a2, a2 + 5);
do {
int sum1 = a1[0] + a1[1] + a1[2];
int sum2 = a1[3] + a1[4];
if (sum1 % 10 == 0) {
if (sum2 % 10 == 0)x1 = 10;
else x1 = sum2 % 10;
break;
}
} while (next_permutation(a1, a1 + 5));
do {
int sum1 = a2[0] + a2[1] + a2[2];
int sum2 = a2[3] + a2[4];
if (sum1 % 10 == 0) {
if (sum2 % 10 == 0)x2 = 10;
else x2 = sum2 % 10;
break;
}
} while (next_permutation(a2, a2 + 5));
if (x1 > x2)cout << "-1" << endl;
else if (x1 < x2)cout << "1" << endl;
else {
if (max1 > max2)cout << "-1" << endl;
if (max1 < max2)cout << "1" << endl;
if (max1 == max2)cout << "0" << endl;
}
}
}
}