一、题目描述
二、解题思路
刚开始拿到题目的时候在想是不是需要把所有情况枚举出来,其实思考一下能看出规律:
1.如果有1、2、3颗石子,小牛一定可以赢;
2.再来看4颗石子的时候,小牛A可以拿1~3颗,但是无论小牛A拿多少,小牛B一定能拿到最后一颗。
所以,当一堆石子个数为4的倍数时,无论小牛A拿多少x颗(1~3颗),小牛B都可以拿4-x颗,这样拿到剩下最后四颗的时候,小牛B一定能拿到最后一颗。
再来看石子个数不是4的倍数时,小牛A可以每次只拿一颗,无论小牛B拿多少颗,最后一轮剩下的石子个数肯定小于4,此时一定是小牛A赢。
那么此题就抽象为:当一堆石子个数是4的倍数时,小牛A可能会输,其他情况小牛A一定可以通过一定的策略赢。
三、代码实现
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param piles int整型一维数组
* @return int整型一维数组
*/
public int[] canWin (int[] piles) {
int[] res=new int[piles.length];
for(int i=0;i<piles.length;i++){
if(piles[i]%4==0){
res[i]=0;
}else{
res[i]=1;
}
}
return res;
}
}
四、刷题链接
牛牛的石头游戏_牛客题霸_牛客网