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

题目

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

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

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

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

题解:

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

C++解法

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

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));
    }
}

原文链接:百度笔试

你可能感兴趣的:(石头剪刀布(百度测试开发工程师面试题))