经典案例猴子选大王

猴子选大王

题目要求:
(数组)十五个猴子围成一圈选大王,依次 1-7 循环报数,报到7的猴子被淘汰,直到最后一只猴子成
为大王。问,哪只猴子最后能成为大王?
题目解读和解题思路:
根据题目要求:
1.定义一个长度为15的字符串数组,用来代表15只猴子。
String[] s = { "猴1", "猴2", "猴3", "猴4", "猴5", "猴6", "猴7", "猴8", "猴9",
				"猴10", "猴11", "猴12", "猴13", "猴14", "猴15" };
2.遍历数组,跟据题意淘汰的猴子位置设值为null。为保证数到7后,能把所对应的猴子赋值为null,因此定义一个变量index用来计数,当index为数到7,赋null,并清零开始重新数。
3.为保证数组的循环遍历,因此在遍历数组外层需要套一层while循环。
4.选大王最后肯定剩一只猴子,所以需要淘汰14只猴子,因此需定义一个变量count,每一次赋值为null都进行一次加1。加到14的时候,说明淘汰了14只猴子,因此跳出循环。
5.最后遍历数组看剩哪一只猴子。
代码实现:
package TestDifflut;
//(数组)十五个猴子围成一圈选大王,依次 1-7 循环报数,报到 7 的猴子被淘汰,直到最后一只猴子成
//为大王。问,哪只猴子最后能成为大王?
public class Test6 {
	public static void main(String[] args) {
		//定义字符串数组,存储猴子数据。
		String[] s = { "猴1", "猴2", "猴3", "猴4", "猴5", "猴6", "猴7", "猴8", "猴9",
				"猴10", "猴11", "猴12", "猴13", "猴14", "猴15" };
		int index = 0;//定义一个变量,记录每次数到1-7.
		//外层while循环,保证能一直循环遍历数组
	a:	while (true) {
			for (int i = 0; i < s.length; i++) {
				//当猴子被清空为null时,跳过本次循环
				if (s[i] == null) continue;
				//不为空则继续加1计数。
				index++;				
				//index数到7的时候进行淘汰猴子
				if (index % 7 == 0) {
					s[i] = null;
				}
				//每次数到7要重新计数
				if(index==7)index=0;
			}
			//定义一个count变量,用于记录数组中元素为null的个数(即淘汰猴子的个数)
			int count=0;
			//遍历数组,如果为null,count+1;
			for(int j=0;j<s.length;j++){
				if(s[j]==null)count++;
			}
			//当null的个数是14个的时候,需要跳出循环(即淘汰了14个猴子)
			if(count==14){
				break a;
			}
		}
		//遍历数组,看剩哪一只猴子
		for(int j=0;j<s.length;j++){
			if(s[j]!=null){
				System.out.println(s[j]);
			}
		}
	}
}
结果展示:
结果为:猴5.





 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值