/**
* 阿里巴巴面試題
* 有一堆石子共100枚,甲乙輪流從該堆中取石子,每次能夠取二、4或6枚,取得最後的石子的玩家爲贏家,若甲先取,則:
* A 誰都沒法必勝
* B 乙必勝
* C 甲必勝
* D 不肯定
* 閒來蛋疼就作這道題試試 思路分析
* 假設每人都只能取2枚,那麼一共能夠取50次,因此甲先取的話,那麼最後一次必然是乙
* 同理,若每次只能取4枚,那麼一共能夠取25次,因此甲先取,最後一次必然是甲,可是若每次取6枚的話,那麼就不能整除,
* 因此,此題難在關鍵不肯定每次甲或乙會取幾個,可是咱們能夠看到一個共性,若是取石子的次數是奇數的話,那麼必然是甲勝,若取石子
* 的次數是偶數的話,那麼必然是乙勝,看看每次甲和乙取石子的組合有哪些:
*首先,甲每次有三種選擇,乙也每次有三種選擇,因此一共是3*3=9種選擇
* A:甲 2 乙 2 和是 4
* B:甲 2 乙 4 和是 6 或者 甲 4 乙 2 和是 6
* C:甲 2 乙 6 和是 8 或者 甲 6 乙 2 和是 8
* D:甲 4 乙 4 和是 8
* E:甲 4 乙 6 和是10 或者 甲 6 乙 4 和是 10
* F:甲 6 乙 6 和是 12
*由上分析能夠看出 100/4=25能夠整除,100/6=16餘4,100/8=12餘4,100/10=10能夠整除,100/12=8餘4
*因此咱們假設甲先取4個,那麼剩下96個,由於96是8的倍數,因此不管乙取幾個,甲只要取(8-乙取的)個石子,就必然能保證96/8=12,最後必然是甲勝
*同理咱們再次假設甲先取2個,那麼剩下98個,不能整除8,餘2,因此最後一次是乙取,因此必是乙勝
*咱們再假設甲先取6個,那麼剩下94個,不能整除8,餘6,因此不肯定是甲勝仍是乙勝,由於最後剩下的6個乙能夠取完,也能夠不取完,徹底看乙的選擇而定,因此選A
*/
//如下程序測試在甲先取4個的狀況
public class AliBabaTest {
public static void main(String[] args) {
int numOfA;//表示甲取的個數
int numOfB;//表示乙取的個數
int num = 96;//表示甲先取4個以後,剩餘的石子總數
int count = 1;//計數器
while(num!=0){
int random = (int) (3*Math.random());//[0,1),[0,3)
//random產生的隨機數,每次都是0、1或2,若是是0,那麼就假設乙取2個,若是是1就假設乙取4個,若是是2就假設乙取6個
if(random==0){
numOfB = 2;
numOfA = 8-numOfB;
num -= 8;
System.out.println("第"+count+"輪-->"+"乙取了:"+numOfB+"個石子,甲取了:"+numOfA+"個石子");
count++;
}else if(random==1){
numOfB = 4;
numOfA = 8-numOfB;
num-=8;
System.out.println("第"+count+"輪-->"+"乙取了:"+numOfB+"個石子,甲取了:"+numOfA+"個石子");
count++;
}else if(random==2){
numOfB = 6;
numOfA = 8-numOfB;
num -= 8;
System.out.println("第"+count+"輪-->"+"乙取了:"+numOfB+"個石子,甲取了:"+numOfA+"個石子");
count++;
}else{
System.out.println("隨機數產生錯誤...");
}
}
System.out.println("甲得到了勝利...");
}
}
/**
* 如下是某次的運行結果:
第1輪-->乙取了:6個石子,甲取了:2個石子
第2輪-->乙取了:2個石子,甲取了:6個石子
第3輪-->乙取了:6個石子,甲取了:2個石子
第4輪-->乙取了:2個石子,甲取了:6個石子
第5輪-->乙取了:4個石子,甲取了:4個石子
第6輪-->乙取了:6個石子,甲取了:2個石子
第7輪-->乙取了:4個石子,甲取了:4個石子
第8輪-->乙取了:6個石子,甲取了:2個石子
第9輪-->乙取了:6個石子,甲取了:2個石子
第10輪-->乙取了:2個石子,甲取了:6個石子
第11輪-->乙取了:6個石子,甲取了:2個石子
第12輪-->乙取了:2個石子,甲取了:6個石子
甲得到了勝利...
*/
//此題剩下的最大疑問點就是爲何選擇了8(指的是每次甲乙一輪取得石子數之和)這個神奇的數字,這是由於8是比6大的最小的偶數,假設選擇的數比6小,那麼乙取了6個以後,甲就沒辦法取了,
//又假設選擇的數比8大,那麼乙取了2個以後,甲最大也只能取6,因此同樣沒辦法取了
//如有遺漏之處,還望補充
面試