题目

牛牛和牛妹进行石头剪刀布游戏。游戏规则如下:
两个人进行石头剪刀布大战,开始时会发给每个人 张牌,然后两人进行 次剪刀石头布大战,每一次两人分别选择自己的 张牌中的一张,打出,每张牌只能用一次。
牛牛每赢一局会 +1 分,每输一局会 -1 分,每平局一局不加分也不减分。
开始发给牛牛的 张牌里,有 张石头牌, 张剪刀牌, 张布牌。
开始发给牛妹的 张牌里,有 张石头牌, 张剪刀牌, 张布牌。

请问在知道牛妹每一轮出什么牌的情况下,牛牛最终的分数最高多少分?

解题思路

先计算牛牛最多能赢多少轮:,得到了这么多分。
并将发出的牌减去相应数目。
然后计算平局的次数:。这些局不得分。
最后把 减去上面赢和平局的次数,就是牛牛输的次数,扣除这么多分。
返回得到的总分。

C++代码

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @param p1 int整型 
     * @param q1 int整型 
     * @param m1 int整型 
     * @param p2 int整型 
     * @param q2 int整型 
     * @param m2 int整型 
     * @return int整型
     */
    int Highestscore(int n, int p1, int q1, int m1, int p2, int q2, int m2) {
        // write code here
        int cnt1 = min(p1, q2);
        p1 -= cnt1;
        q2 -= cnt1;
        int cnt2 = min(q1, m2);
        q1 -= cnt2;
        m2 -= cnt2;
        int cnt3 = min(m1, p2);
        m1 -= cnt3;
        p2 -= cnt3;

        int cnt = cnt1 + cnt2 + cnt3;
        int score = cnt;
        cnt += min(p1,p2) + min(q1,q2) + min(m1,m2);
        score -= (n-cnt);
        return score;
    }
};