经典案例猴子选大王

猴子选大王

题目要求:

(数组)十五个猴子围成一圈选大王,依次 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.





 

你可能感兴趣的:(java程序)