随便写写:
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个不确定。