• 一道阿里的面试题


    随便写写:

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

  • 相关阅读:
    HTML5中meta属性的使用详解
    前端部分兼容性问题汇总
    position元素定位详述
    jquery简单实现轮播图
    事件委托-选项卡案例
    async、await
    前端会遇到的算法
    arguments实参个数
    前端知识点整理(三)
    var、let、const
  • 原文地址:https://www.cnblogs.com/james1207/p/3341712.html
Copyright © 2020-2023  润新知