当前位置: 首页 > 工具软件 > Alice > 使用案例 >

1248 Alice and Bob

闽鸿宝
2023-12-01

Alice and Bob

题目描述

Alice和Bob在玩骰子游戏,他们用三颗六面的骰子,游戏规则如下:

  1. 点数的优先级是1点最大,其次是6,5,4,3,2。
  2. 三个骰子点数相同,称为"豹子",豹子之间按点数优先级比较大小。
  3. 如果只有两个骰子点数相同,称为"对子",对子之间按点数优先级比较大小。
  4. 其他情况称为"点子",点子按点数和比较大小。
  5. 豹子比对子、点子大,对子比点子大,如果对子的点数优先级相同,就看剩余那个骰子的点数优先级。

现在给你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

这个题还是蛮复杂的, 最好分情况写,一点点的把所有情况都考虑到。

此外,这个题对于数字大小的判断比较特殊,可以提前写个判断大小的函数,要用的时候引用一下就可以了。

还有就是要细心一点,对于flag呀这种标记变量,自己一定不能忘掉不同的数代表什么意思!!

#include<bits/stdc++.h>
using namespace std;

int scan(int a[])//判断一个数组里有几个相同的数*1
{
	if(a[0]==a[1]&&a[1]==a[2]) return 3;
	else if(a[0]==a[1]||a[1]==a[2]||a[2]==a[0]) return 2;
	else return 0;
}

int judge(int a,int b)//提前写好一个判断数字大小的函数*2
{
	if(a==1||b==1)
	{
		if(a==1&&b==1) return 3;
		else if(a==1)  return 1;
		else return 2;
	}
	else if(a>b) return 1;
	else if(a<b) return 2;
	else return 3;
}

int main()
{
	int k;
	scanf("%d",&k);
	while(k--)
	{
		int a[3],b[3];
		int i,j,co1,co2,m,n,sum1,sum2,flag;
		for(i=0,sum1=0;i<3;i++)//输入 
		{
			scanf("%d",&a[i]);
		}
		for(i=0,sum2=0;i<3;i++)
		{
			scanf("%d",&b[i]);
		}
		co1=scan(a);
		co2=scan(b);
		if(co1>co2) printf("Alice\n");
		else if(co1<co2) printf("Bob\n");
		else if(co1==co2)
		{
			if(co1==3) flag=judge(a[0],b[0]);//对子的比较,由于所有点数相同,只要选一个点数来比较就可以啦 
			else if(co1==2)
			{
				sort(a,a+3);
				sort(b,b+3);
				if(a[1]==b[1])//如果有两个数相同,排完序之后中间的数一定是相同的那个数。 
				{
					int t1,t2;
					if(a[1]==a[0]) t1=a[2];//找是哪个数不同。 
					else t1=a[0];
					if(b[1]==b[0]) t2=b[2];
					else t2=b[0];
					flag=judge(t1,t2);
				}
				else//相同的数是不同的,比较相同数的大小 
				{
					flag=judge(a[1],b[1]);
				}
			}
			else if(co1==0)
			{
				sum1=a[0]+a[1]+a[2];
				sum2=b[0]+b[1]+b[2];
				if(sum1>sum2) flag=1;
				else if(sum1<sum2) flag=2;
				else if(sum1==sum2) flag=3;
			}
			if(flag==1) printf("Alice\n");
			else if(flag==2) printf("Bob\n");
			else if(flag==3) printf("Draw\n");
		}
	}
	return 0;
 } 

这个 还是参考网上大佬的代码自己改了一下orz

总结 一下优点:

*1:这里判断有几个数相同的方法还是比较妙的,因为就三个数嘛,把所有的情况举出来就可以了,我一开始还卡在这里了,老是想很复杂的方法,做题做傻惹qwq

*2:判断大小这里的判断语句也很容易错,因为我一开始就是错在这里......一定要想好逻辑关系,不能漏也不能重复,最好是把最最特殊的情况写到最前面。

*3:对对子的判断也很妙,看起来也很容易懂,不像我自己写的代码......努力学习好的想法和风格!!!

其实这道题也蛮有意思的,这种掷骰子的问题也可以用编程的方法来解决,或许生活中的其他问题也可以呢?如果世界的万物都能用一行行代码来概括,那是真的很cool!所以在生活中也要用编程的思想来看一些问题呀,编程真的其乐无穷吔!

 类似资料:

相关阅读

相关文章

相关问答