一道阿里的面试题
随便写写:
package com.test; /** * 有一堆石子共100枚,甲乙轮流从该堆中取石子,每次可以去2、4或6枚,取得最后的石子的玩家为赢家,若甲先取,则 A 谁都无法必胜 B 乙必胜 C 甲必胜 D 不确定 * @author zhangxl * */ public class GetNumber { public static void main(String[] args) { int aFirstGet = getRandomNumber(); for(int i = 0;i<50;i++){ Test(i,aFirstGet); } } private static void Test(int m,int aFirstGet){ int getNum = 0; char user = 'A';//A现取之后,轮到B取,这时初始值为B for(int i =100-aFirstGet;i >0;){//A取2或4或6后所剩的 i = i-getNum; if(user=='A'){ user='B'; getNum=8-getNum; }else{ getNum=getRandomNumber(); user='A'; } // System.out.print(getNum+","); } System.out.println("第"+(m+1)+"次试验:"+"A首先取的个数是"+aFirstGet+"时,最后取的人:"+user); } /** * 获取以{2、4、6}为范围的随机数 * @return */ private static int getRandomNumber(){ int num=(int) (Math.random()*6+1); return num%2==0?num:getRandomNumber(); } }
甲先取4个,后面乙取X个,甲就取8-X个。
结论:按照这种方式,A先取4个最后必赢,先取2个是找死,先取6个不确定。