一道阿里的面试题

随便写写:

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个不确定。

原文地址:https://www.cnblogs.com/james1207/p/3341712.html