石头剪刀布(百度测试开发工程师面试题)

题目

西西打算和一头小猪进行N轮剪刀石头布,初始时双方的分数都为0,对每一轮而言,如果不是平局则胜者得1分,败者扣1分。

小猪告诉西西它会在其中的M轮出石头,这意味着它会在剩下的N-M轮出剪刀(因为小猪不会出布)。西西想让自己的分数尽可能高,那么在西西足够聪明的情况下,他的分数至少是多少?

  • 输入:输入两个空格隔开的整数N和M,

  • 输出:输出在西西足够聪明的情况下,他的分数可能的最小值

题解:

首先西西不会出剪刀,那就从出布和石头里选,如果在某轮之后小猪所有的石头(或者剪刀)都出完了,就知道后面该怎么出了,如果到最后一轮小猪的石头(或剪刀)还没出完,此时应该是最坏的情况,因为在整个过程中无法确定小猪的石头剪刀怎么出,只能取全出石头或者全出布的最大值作为能获得分数的最小值。(其实本来没想到这么写,看到数据范围到1e9,应该能猜出一点什么了,这么大的数据,一个循环就会崩,应该是直接找数)

C++解法

//<bits/stdc++.h>包含了C++所有头文件的一个头文件
#include<bits/stdc++.h>
using namespace std;
 
int main() {
    //M分是布对石头赢得分 
    //N - M是布对剪刀输的分,
    //全出布的时候,M-(N-M)
    int n,m;
    cin>>n>>m;
    //N - M是扣的分,西西出布被小猪扣掉 
    //输出全输的分,和赢输都有的分对比两个谁的分值更大
    cout<<max(n-m,2*m-n);
    return 0;
}

Java解法

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        System.out.print(Math.max(n - m, 2 * m - n));
    }
}

原文链接:百度笔试

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • sì 支zhī茶chá 对duì 酒jiǔ,赋fù 对duì 诗shī,燕yàn子zi 对duì 莺yīng 儿é...
    每个人的孟母堂阅读 5,036评论 0 6
  • 一年级语文上册生字表 生字表一(共400字) 啊(ā)爱(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang阅读 8,035评论 0 6
  • 筷子好事,喜欢拔动是非。 在餐桌前老是挑这个,夹那个,甚至戳哪个。于是众菜提议取消筷子的资格。贬回厨房回到...
    牧羊村的人阅读 3,325评论 0 1
  • 某一个要上班的周六结果调休了,事实证明不能在该上班的时间独自在家,这样容易陷入…骗局 事情的介样的:我信任的同事发...
    5c8f52b521ac阅读 952评论 0 1
  • 安离有一个曲折离奇的背景,她从不与人提起,毕竟,名字已经够奇怪了,再语出惊人就不太好了。 安离经常会做一些奇怪...
    an离阅读 3,258评论 0 1