R7-3 斗牛

R7-3 斗牛R7 3 斗牛 分数 15 全屏浏览题目 切换布局 作者 黄龙军单位 绍兴文理学院 牛年 三月中旬 周六 诺诺和诺爸玩起了 斗牛 纸牌游戏 斗牛玩法如下 对于一副扑克牌 每人发 5 张牌 根据牌面计算出各自是牛几 牛 1 牛 2

大家好,我是讯享网,很高兴认识大家。

R7-3 斗牛

分数 15

全屏浏览题目

切换布局


讯享网

作者 黄龙军单位 绍兴文理学院

牛年,三月中旬,周六,诺诺和诺爸玩起了“斗牛”纸牌游戏。斗牛玩法如下:对于一副扑克牌,每人发5张牌,根据牌面计算出各自是牛几(牛1,牛2,……,牛9,牛10),然后比较牛大小,牛大者胜,若牛一样大或者都无牛(牛0),则和局。牛几的计算方法:任取3张牌,把牌面值累加凑成10的倍数(若无法凑成则无牛),设剩下2张牌面值加起来的和S,若S为10的倍数则为牛10(双牛),否则用S(S小于10的情况)或用S减去10(S大于10的情况)的结果确定,例如,牌面4 3 4 6 10时,为牛7。牌面值为2至10,牌面A表示牌面值1,牌面为J、Q、K则按牌面值等于10对待。现在给你10张牌,前5张为诺诺的牌面,后5张为诺爸的牌面,请判断诺诺能否获胜。

输入格式:

首先输入一个整数T(1<=T<20),表示测试组数。 每组测试输入两行,每行5个牌面,或为数值2、3、4、5、6、7、8、9、10,或为字符A,J、Q、K,其中A表示牌面值为1、其他表示牌面值为10,数据之间以一个空格分隔。

输出格式:

对于每组测试,在一行上输出一个字符串,其中,“Win”表示诺诺胜,“Lose”表示诺诺败,“Draw”表示和局。引号不必输出。

输入样例:

2 8 5 5 K 10 A 2 7 4 4 A 2 2 6 A J 10 Q K A

讯享网

输出样例:

讯享网Draw Win
 #include<bits/stdc++.h> using namespace std ; void Init(vector<int>& v) { string ch; for (int i = 0; i < 5; i++) { cin >> ch; if (ch[0] == 'A')v[i] = 1; else if (ch[0] > 'A' || ch.size() == 2) { v[i] = 10; } else v[i] = (int)(ch[0] - '0'); } } vector<int> twoSum(vector<int>& nums, int target,int x) { unordered_map<int, int> HS;//底层是哈希表 auto it = HS.end(); vector<bool> bo(5, 1); bo[x] = 0; for (int i = 0; i < 5; ++i) { if(bo[i]) it = HS.find(target - nums[i]); if (it != HS.end()) { return { it->second,i }; } if(bo[i]) HS[nums[i]] = i; } return { 0,0 }; } int myans(vector<int>& v1) { vector<int>temp; int ans1 = 0; int Tans = 0; for (int i = 0; i < 5; i++) { Tans = 0; if (v1[i] == 10) { temp = twoSum(v1, 10,i); if (temp[1]) { for (int j = 0; j < 5; j++) { if (j != i && j != temp[0] && j != temp[1]) { Tans += v1[j]; } } if (0 == Tans % 10)Tans = 10; else Tans %= 10; } ans1 = max(ans1, Tans); temp = twoSum(v1, 20, i); if (temp[1]) { for (int j = 0; j < 5; j++) { if (j != i && j != temp[0] && j != temp[1]) { Tans += v1[j]; } } if (0 == Tans % 10)Tans = 10; else Tans %= 10; } } else { temp = twoSum(v1, 10 - v1[i], i); if (temp[1]) { for (int j = 0; j < 5; j++) { if (j != i && j != temp[0] && j != temp[1]) { Tans += v1[j]; } } if (0 == Tans % 10)Tans = 10; else Tans %= 10; } ans1 = max(ans1, Tans); temp = twoSum(v1, 20 - v1[i], i); if (temp[1]) { for (int j = 0; j < 5; j++) { if (j != i && j != temp[0] && j != temp[1]) { Tans += v1[j]; } } if (0 == Tans % 10)Tans = 10; else Tans %= 10; } } ans1 = max(ans1, Tans); } return ans1; } int main() { int T; cin >> T; for (int i = 0; i < T; i++) { vector<int>v1(5, 0), v2(5, 0); //存入数据 Init(v1); Init(v2); //开始判断 int ans1 = 0, ans2 = 0;//默认无牛 ans1 = myans(v1); ans2 = myans(v2); //返回结果 if (ans1 == ans2)cout << "Draw" << endl; else if (ans1 > ans2)cout << "Win" << endl; else cout << "Lose" << endl; } return 0; }
小讯
上一篇 2025-01-19 18:21
下一篇 2025-04-01 12:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/51697.html