骰子游戏

题目来源:湘潭大学OJ-1248

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
#include
#include
using namespace std;
int ct(int* a)
{
	if (*(a) == *(a + 1) == *(a + 2))
		return 3;
	else if (*(a) == *(a + 1) || *(a) == *(a + 2) || *(a + 1) == *(a + 2))
		return 2;
	else
		return 1;
}
string com(int* a, int* b)
{
	if (*a == 1 && *b != 1)return "Alice";
	else if (*b == 1 && *a != 1)return "Bob";
	else if (*a > * b)return "Alice";
	else if (*b > * a)return "Bob";
}
string ck(int* a, int* b)
{
	string inst;
	sort(a, a + 3);
	sort(b, b + 3);
	if(*(a+1)!=*(b+1))
	inst=com((a + 1), (b + 1));
	else if (*(a) != *(a + 1) && *(b) != *(a + 1))inst=com(a, b);
	else if (*(a) != *(a + 1) && *(b + 2) != *(a + 1))inst=com(a, b + 2);
	else if (*(a + 2) != *(a + 1) && *(b + 2) != *(a + 1))inst=com(a + 2, b + 2);
	else if (*(a + 2) != *(a + 1) && *(b) != *(a + 1))inst=com(a + 2, b);
	else inst="Draw";
	return inst;
}
int main()
{
	int a[3], b[3];
	int k;
	cin>>k;
	while(k--){
	for (int i = 0; i < 3; i++)
		cin >> a[i];
	for (int i = 0; i < 3; i++)
		cin >> b[i];
	int ca = ct(a);
	int cb = ct(b);
	if (ca ==2&& cb == 2 || ca ==3&& cb == 3)cout< cb)cout << "Alice" << endl;
		else cout << "Bob" << endl;
	}
	else if(ca==1&&cb==1)
	{
		int suma = *(a)+*(a + 1) + *(a + 2);
		int sumb = *(b)+*(b + 1) + *(b + 2);
		if (suma > sumb)cout << "Alice" << endl;
		else if (suma < sumb)cout << "Bob" << endl;
		else cout << "Draw" << endl;
	}
}
return 0;

}

这道题我有几点注意可以和大家分享一下:

1.这里需要注意的是在主函数里面(ca ==2&& cb == 2 || ca ==3&& cb == 3)的这段代码,本来我像上面函数块一样是写成连等的,后来被编译器认定为bool值向int型的提升,所以改成这样了,

2.思路一定要明确,要打什么事先想好,不要在中途变来变去

下面是我的运行截图:

骰子游戏_第1张图片

你可能感兴趣的:(ACM)