一道阿里的面试题
随便写写:
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取,这时初始值为Bfor(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个不确定。