- 题目
题目描述
Alice和Bob在玩骰子游戏,他们用三颗六面的骰子,游戏规则如下:
点数的优先级是1点最大,其次是6,5,4,3,2。
三个骰子点数相同,称为"豹子",豹子之间按点数优先级比较大小。
如果只有两个骰子点数相同,称为"对子",对子之间按点数优先级比较大小。
其他情况称为"点子",点子按点数和比较大小。
豹子比对子、点子大,对子比点子大,如果对子的点数优先级相同,就看剩余那个骰子的点数优先级。
现在给你Alice和Bob投掷骰子的情况,判断一下胜负情况。
输入
第一行输入一个整数K,表示游戏的次数。 以后每两行表示一个样例,第一行是Alice骰子的点数。第二行是Bob骰子的点数。
输出
如果是Alice赢,输出"Alice",如果是Bob赢,输出"Bob",否则输出"Draw"。
样例输入
3
1 1 1
6 6 6
2 1 2
4 5 4
4 5 6
6 5 4
样例输出
Alice
Bob
Draw
- 解法
这就是一道模拟题,写的时候注意细节就好。我的代码如下。
#include <cstdio>
#include <algorithm>
using namespace std;
int f(int *a) {
//三个数都相等 豹子
if((a[0] == a[1]) && (a[1] == a[2])) {
return 10;
} else if(a[0] == a[1] || a[1] == a[2] || a[0] == a[2]) {//对子
return 9;
} else {
return 8;
}
}
int find(int *a) {
if(a[0] == a[1] || a[0] == a[2]) {
return a[0];
}
if(a[1] == a[2]) {
return a[1];
}
}
int main(int argc, char const **argv) {
int K;
int a[3], b[3];
scanf("%d", &K);
while(K--) {
for(int i = 0; i < 3; i++) {
scanf("%d", &a[i]);
}
for(int i = 0; i < 3; i++) {
scanf("%d", &b[i]);
}
//1最大 所以这里把1换成了7
for(int i = 0; i < 3; i++) {
if(a[i] == 1) {
a[i] = 7;
}
}
for(int i = 0; i < 3; i++) {
if(b[i] == 1) {
b[i] = 7;
}
}
int pa = f(a);
int pb = f(b);
if(pa > pb) {
printf("%s\n", "Alice");
} else if(pa == pb && pa == 10) {
if(a[0] > b[0]) {
printf("%s\n", "Alice");
} else if(a[0] == b[0]) {
printf("%s\n", "Draw");
} else {
printf("%s\n", "Bob");
}
} else if(pa == pb && pa == 9) {
int p = find(a);
int q = find(b);
if(p > q) {
printf("Alice\n");
} else if(p == q) {
int m;
for(int i = 0; i < 3; i++) {
if(a[i] != p) {
m = a[i];
}
}
int n;
for(int i = 0; i < 3; i++) {
if(b[i] != q) {
n = b[i];
}
}
if(m > n) {
printf("Alice\n");
} else if(m == n) {
printf("Draw\n");
} else {
printf("Bob\n");
}
} else {
printf("Bob\n");
}
} else if(pa == pb && pa == 8) {
//计算点数和的时候要把7 换回来
for(int i = 0; i < 3; i++) {
if(a[i] == 7) {
a[i] = 1;
}
}
for(int i = 0; i < 3; i++) {
if(b[i] == 7) {
b[i] = 1;
}
}
int p = a[0] + a[1] + a[2];
int q = b[0] + b[1] + b[2];
if(p > q) {
printf("Alice\n");
} else if(p == q) {
printf("Draw\n");
} else {
printf("Bob\n");
}
} else {
printf("Bob\n");
}
}
return 0;
}