Alice and Bob
题目描述
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
AC代码
#include<stdio.h>
int Judge(int a[]){//判断所属的情况
int flag=1;
if(a[0]==a[1]&&a[0]==a[2]&&a[1]==a[2]){
flag=2;
}
else if(a[0]!=a[1]&&a[0]!=a[2]&&a[1]!=a[2]){
flag=0;
}
return flag;
}
void Compare(int a,int b){//比较大小
if(a>b)printf("Alice\n");
else if(a==b)printf("Draw\n");
else printf("Bob\n");
}
int Same(int a[]){//找到对子中相等的数
int i,j,flag=1,t;
for(i=0;i<2&&flag;i++){
for(j=i+1;j<3;j++){
if(a[i]==a[j]){
flag=0;
t=a[i];
break;
}
}
}
return t;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
int a[4]={};
int b[4]={};
int i,j;
for(i=0;i<3;i++){
scanf("%d",&a[i]);
if(a[i]==1)a[i]=7;//1最大,赋值为7
}
for(i=0;i<3;i++){
scanf("%d",&b[i]);
if(b[i]==1)b[i]=7;
}
int flag1=Judge(a),flag2=Judge(b),sum1=0,sum2=0;
if(flag1>flag2)printf("Alice\n");
else if(flag1==flag2){
if(flag1==0){
for(i=0;i<3;i++){
if(a[i]==7)a[i]=1;//加法1最小
if(b[i]==7)b[i]=1;
sum1+=a[i];
sum2+=b[i];
}
Compare(sum1,sum2);
}
else if(flag1==2){
Compare(a[0],b[0]);
}
else{
int x=Same(a);
int y=Same(b);
if(x==y){
for(i=0;i<3;i++){//找到对子中的另一个数
if(a[i]!=x){
x=a[i];
break;
}
}
for(i=0;i<3;i++){
if(b[i]!=y){
y=b[i];
break;
}
}
}
Compare(x,y);
}
}
else printf("Bob\n");
}
}
解题思路看代码