骰子游戏

    xiaoxiao2024-11-13  68

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

    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

    看了网上的代码,用的最多的核心方法是加个flag总体输出,不过我的思路略有不同,我采取的是干掉一个就杀一个,不在最后作总的判断,下面上代码:

    #include<iostream> #include<algorithm> #include<string> 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<<ck(a, b)<<endl; else if (ca != cb) { if (ca > 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.思路一定要明确,要打什么事先想好,不要在中途变来变去

    下面是我的运行截图:

    最新回复(0)