題目
西西打算和一頭小豬進(jìn)行N輪剪刀石頭布概漱,初始時雙方的分?jǐn)?shù)都為0蝌焚,對每一輪而言,如果不是平局則勝者得1分号杏,敗者扣1分婴氮。
小豬告訴西西它會在其中的M輪出石頭,這意味著它會在剩下的N-M輪出剪刀(因為小豬不會出布)。西西想讓自己的分?jǐn)?shù)盡可能高莹妒,那么在西西足夠聰明的情況下名船,他的分?jǐn)?shù)至少是多少?
輸入:輸入兩個空格隔開的整數(shù)N和M旨怠,
輸出:輸出在西西足夠聰明的情況下渠驼,他的分?jǐn)?shù)可能的最小值
題解:
首先西西不會出剪刀,那就從出布和石頭里選鉴腻,如果在某輪之后小豬所有的石頭(或者剪刀)都出完了迷扇,就知道后面該怎么出了,如果到最后一輪小豬的石頭(或剪刀)還沒出完爽哎,此時應(yīng)該是最壞的情況蜓席,因為在整個過程中無法確定小豬的石頭剪刀怎么出,只能取全出石頭或者全出布的最大值作為能獲得分?jǐn)?shù)的最小值课锌。(其實本來沒想到這么寫厨内,看到數(shù)據(jù)范圍到1e9,應(yīng)該能猜出一點什么了渺贤,這么大的數(shù)據(jù)雏胃,一個循環(huán)就會崩,應(yīng)該是直接找數(shù))
C++解法
//<bits/stdc++.h>包含了C++所有頭文件的一個頭文件
#include<bits/stdc++.h>
using namespace std;
int main() {
//M分是布對石頭贏得分
//N - M是布對剪刀輸?shù)姆?
//全出布的時候,M-(N-M)
int n,m;
cin>>n>>m;
//N - M是扣的分志鞍,西西出布被小豬扣掉
//輸出全輸?shù)姆植t亮,和贏輸都有的分對比兩個誰的分值更大
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));
}
}
原文鏈接:百度筆試