百度2020校招测试工程师笔试题 石头剪刀布

Problem Description

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

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

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

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

Mentality

因为小猪只会出石头和剪刀,西西足够聪明,所以西西也只会出布和石头,即西西不会出剪刀。
现在假设最佳的情况:在某轮之后,小猪所有的石头(或者剪刀)都出完了,那么西西就知道后面该怎么出了
假设最坏的情况:如果到最后一轮小猪的石头(或者剪刀)还没出完,则在整个过程中西西无法确定小猪怎么出,故只能用全出石头或者全出布的最大值作为能获得分数的最小值。若西西全出石头,则其中M轮平局,N-M轮获胜,得分为N-M;若西西全出布,则其中M轮获胜,N-M轮失败,得分为M-(N-M)=2*M-N。

Other Details

小技巧:由于数据范围是1e9,非常大,如果使用循环,就会崩溃,所以应该另求他法,比如找规律得出具体数字。

Code (C++)

#include<bits/stdc++.h>
using namespace std;
 
int main() {
    int n(0), m(0);
    cin>>n>>m;
    cout<<max(n-m,2*m-n);//M-(N-M)=2*M-N
    return 0;
}
发布了19 篇原创文章 · 获赞 10 · 访问量 1201

猜你喜欢

转载自blog.csdn.net/qq_38655181/article/details/105268208