对于初学Java的小白可能遇到过猴子选大王这个问题。
这个问题是这样的:15只猴子围成一圈选大王,依次1-7循环报数,报到7的 猴子被淘汰,直到最后一只猴子成为大王,问我们哪只猴子会成为大王。
我们看到这个题首先应该想到用布尔数组表示猴子的状态,
代码如下:
// 布尔数组---表示猴子的状态
boolean[] bs=new boolean[15];
//初始化--- 当true时表示的是未淘汰,为false时表示已淘汰,
for(int i=0;i<bs.length;i++){
bs[i]=true;
}
数组初始化完成后,我们还应该添加一些必要的变量:
//猴子剩余数
int monkeyleft =15;
//报数
int num=0;
//数组的下标
int index=0;
到这里我们定义出了与题相关的变量,现在开始循环淘汰猴子,直至剩下最后一只:
//猴子数大于1时进入循环
while(monkeyleft>1){
//判断猴子是否已经被淘汰
if(bs[index]){
//开始报数
num++;
//当num==7时要淘汰猴子
if(num==7){
//报数置为0
num=0;
//数组元素值为false
bs[index]=false;
//猴子数-1
monkeyleft--;
}
}
//下标要往后移动一位
index++;
//同时我们还要保证首尾相连,就是指第15只猴子报完数
后,由第一只猴子接着报数
if(index==15){
index=0;
}
}
最后我们遍历原数组,输出结果:
for(int i=0;i<bs.length;i++){
if (bs[i]){
System.out.println(i+1);
}
}
到这里我们就可以通过运行得出最后的结论,最后是第5只猴子成功当选大王。