题解 | #石头、剪刀、布I#

石头、剪刀、布I

http://www.nowcoder.com/practice/290afe7420704eb89376e74740b06cb3

描述

Alice和Bob打牌,每人都有n张牌
Alice的牌里有p1张石头牌,q1张剪刀牌,m1张布牌。
Bob的牌里有p2张石头牌,q2张剪刀牌,m2张布牌。
Alice知道Bob每次要出什么牌,请你安排策略,使Alice获胜次数最多。
输出获胜次数。

示例1

输入:
3,3,0,0,0,0,3

返回值:
0

说明:
Alice只有石头,Bob只有布,每一场Alice都必败,所以Alice只能赢0局  

示例2

输入:
6,2,2,2,2,2,2

返回值:
6

说明:
Alice可以在Bob出石头的时候出布,在Bob出布的时候出剪刀,在Bob出剪刀的时候出石头,按照这个策略Alice最多能赢下所有的比赛,所以最多能赢6局

思路

这道题很简单,石头剪刀布,只有石头能克剪刀,只有布能克石头,只有剪刀能克布。
咱们只要判断一下 Alice 有多少布,Bob 有多少石头,然后取最小值,就能得到 Alice 利用 能战胜 Bob 石头 多少次了。其余两队也是如此。

AC 代码

public int Mostvictories (int n, int p1, int q1, int m1, int p2, int q2, int m2) {
        // write code here
        if (n < 1) {
            return 0;
        }
        int count = 0;
        // 当 Alice 的 布牌 和 Bob 的石头牌 都大于 0 时
        // Alice 的获胜次数为 布牌 和 石头牌 最小数量
        // 因为只有布牌克石头牌,石头牌也只有布牌才能战胜
        if (m1 > 0 && p2 >= 0) {
            count += Math.min(m1, p2);
        }
        // 同上
        if (p1 > 0 && q2 > 0) {
            count += Math.min(p1, q2);
        }
        // 同上
        if (m2 > 0 && q1 > 0) {
            count += Math.min(m2, q1);
        }
        return count;
    }
  • 时间复杂度:O(1),没有进行数组迭代之类的操作
  • 空间复杂度:O(1),没有使用额外空间

最后

大家有兴趣可以来我的牛客博客中看看其他内容,兴许对你有所帮助。

AC_算法题 文章被收录于专栏

AC 算法题

全部评论

相关推荐

04-03 22:41
兰州大学 C++
老六f:有时候是HR发错了,我之前投的百度的后端开发,他给我发的算法工程师,但是确实面的就是百度开发
点赞 评论 收藏
分享
AI牛可乐:哇,听起来你很激动呢!杭州灵枢维度科技听起来很厉害呀~你逃课去白马培训,老冯会同意吗?不过既然你这么感兴趣,肯定是有原因的吧! 对了,想了解更多关于这家公司或者求职相关的问题吗?可以点击我的头像私信我哦,我可以帮你更详细地分析一下!
你都用vibe codi...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务