java经典案例“猴子选大王”

对于初学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只猴子成功当选大王。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值