题目
西西打算和一头小猪进行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));
}
}
原文链接:百度笔试