练习题 day04

5.15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰, 直到最后一只猴子成为大王。问:哪只猴子会成为大王?

  • 猴子编号:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  • 淘汰顺序:7 14 6 15 9 3 13 11 10 12 2 8 1 4
  • 猴王:5

代码和注释

方法1
package cn.tedu.answer;
import java.util.Arrays;
public class Answer5 {
	public static void main(String[] args) {
		//定义猴子数组,数组值为其编号
		int[] monkeys={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
		int counter=0;  //计数器--到7时,对数组进行操作并将counter清零
		while(monkeys.length!=1){//一直执行剔除猴子的操作,直到选出猴王
			int a = 0;//计数器--计数被剔除的猴子
			for(int i=0;i<monkeys.length;i++){//在猴群中遍历
				counter++;
				if(counter==7){//当计数器为7
					System.out.println(monkeys[i]);
					monkeys[i]=0;//把报数7的猴子剔除
					a++;//被剔除的猴子数量加1
					counter=0;//从0重新开始循环
				}
			}
			
			//定义新数组,将剔除后的猴群转入新数组
			int[] newmonkeys=new int[monkeys.length-a];
			int index=0;//新数组下标
			for(int i=0;i<monkeys.length;i++){//遍历旧数组
				if(monkeys[i]!=0){//将剩下的猴子转入新数组
					newmonkeys[index++]=monkeys[i];
				}
			}
			//将新数组赋值给旧数组,重新开始上方剔除猴子的操作
			monkeys=newmonkeys;
		}
		//输出猴王编号
		System.out.println(Arrays.toString(monkeys));
	}
}
方法2
public class Answer5{
	public static void main(String[] args) {
		//用boolean数组去标志猴子的状态
		boolean[] b=new boolean[15];
		//初始化数组--未淘汰的状态为true
		for(int i=0;i<b.length;i++){
			b[i]=true;
		}
		//剩余的猴子数
		int monkeyLeft=15;
		//报数
		int num=0;
		//数组的下标
		int index=0;
		
		//循环报数
		while(monkeyLeft>1){
			//判断猴子是否被淘汰
			if(b[index]){
				//没有被淘汰,就报数
				num++;
				//数到7淘汰
				if(num==7){
					//猴子减一
					monkeyLeft--;
					//转变状态
					b[index]=false;
					//num为0
					num=0;
				}
			}
			//下标后移
			index++;
			//保证下标不越界
			if(index==15){
				index=0;
			}
		}
		//输出
		for(int i=0;i<b.length;i++){
			if(b[i]){
				System.out.println(i+1);
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值