*题目描述 *
牛牛为了让牛妹崇拜他,决定和牛妹进行石头剪刀布游戏。
当然,普通的石头剪刀布根本吸引不到牛妹,也无法展现牛牛高超的能力,所以牛牛想起了他在一本漫画中看到的规则,游戏规则如下:
两个人进行石头剪刀布大战,开始时会发给每个人n张牌,然后两人进行n次剪刀石头布大战,每一次两人分别选择自己的n张牌中的一张,打出,每张牌只能用一次。
牛牛每赢一局会+1分,每输一局会-1分,每平局一局不加分也不减分。
牛牛这个游戏已经玩到了出神入化的地步,以至于他能猜到每一次牛妹会出什么牌。请问在知道牛妹每一轮出什么牌的情况下,牛牛最终的分数最高多少分?
开始发给牛牛的n张牌里,有p1张石头牌,q1张剪刀牌,m1张布牌。
开始发给牛妹的n张牌里,有p2张石头牌,q2张剪刀牌,m2张布牌。
请返回牛牛的最高得分
题目分析
这个题和之前的那个题不一样,可以说是升级版的题目,题目要求最高得分,按照之前那个题目我们先把牛牛最多赢的局求出来
———————————————————————————————————————————————————————————————————————————————————————————————
公式
最高得分=牛牛最多赢的局-牛妹最少赢的局
———————————————————————————————————————————————————————————————————————————————————————————————
有公式还不够,我们需要求出最少赢的局是多少,那就按照题目模拟一遍即可
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 a=min(p1,q2);//赢牌 int b=min(q1,m2); int c=min(m1,p2); p1-=a; q2-=a; q1-=b; m2-=b; m1-=c; p2-=c; int sum=a+b+c; int d=min(p1,p2);//平局 int e=min(m1,m2); int f=min(q1,q2); p1-=d; p2-=d; m1-=e; m2-=e; q1-=f; q2-=f; sum-=(p1+p2+m1+m2+q1+q2)/2;//这里为什么要除以二,因为要减去牛妹赢的牌数,因为是一人出一张牌,所以牛妹赢的局就是剩下牌数的一半 return sum; } };