1018 锤子剪刀布(C++)
题目链接:点击进入
这道题主要细节上得考虑到,难度没有,我用一个容器,vec[0]存储平手,vec[1/2/3]分别存储甲胜--1.出“B”赢 2.出“C”赢 3.出“J”赢, vec[4/5/6]分别存储乙赢--4.出“B”赢 5.出“C”赢 6.出“J”赢
第一次提交,测试点1,2,4错误,发现是输出赢得最多的手势,必须初始化为“B”,不然都平手,没有输出。
#include <iostream> #include <string> #include <vector> using namespace std; int Func3(const string& str1, const string& str2) { if (str1 == "C" && str2 == "J") return 1; else if (str1 == "J" && str2 == "B") return 1; else if (str1 == "B" && str2 == "C") return 1; else return 0; } int Func2(const string& str, int flag) { if (str == "B") return (flag < 0 ? 4 : 1); else if (str == "C") return (flag < 0 ? 5 : 2); else return (flag < 0 ? 6 : 3); } int Func(const string& str1, const string& str2) { if (str1 == str2) return 0; if (Func3(str1, str2)) return Func2(str1, 1); else return Func2(str2, -1); } int main() { int n; string str1, str2; vector<int> results, vec(7, 0); cin >> n; for (int i = 0; i < n; ++i) { cin >> str1 >> str2; results.push_back(Func(str1, str2)); } for (int j = 0; j < results.size(); ++j) { ++vec[results[j]]; } int sum1 = vec[1] + vec[2] + vec[3], sum2 = vec[4] + vec[5] + vec[6], max1 = 0, max2 = 0, k = 1, f = 4; cout << sum1 << " " << vec[0] <<" " << n - vec[0] - sum1 << endl; cout << sum2 << " " << vec[0] << " " << n - vec[0] - sum2 << endl; for (int i = 1; i <= 3; ++i) { if (vec[i] > max1) { max1 = vec[i]; k = i; } } for (int i = 4; i <= 6; ++i) { if (vec[i] > max2) { max2 = vec[i]; f = i; } } if (k == 1) cout << "B" << " "; else if (k == 2) cout << "C" << " "; else if (k == 3) cout << "J" << " "; if (f == 4) cout << "B"; else if (f == 5) cout << "C"; else if (f == 6) cout << "J"; return 0; }

浙公网安备 33010602011771号