猴子选大王
题目要求:
(数组)十五个猴子围成一圈选大王,依次 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;
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;
a: while (true) {
for (int i = 0; i < s.length; i++) {
if (s[i] == null) continue;
index++;
if (index % 7 == 0) {
s[i] = null;
}
if(index==7)index=0;
}
int count=0;
for(int j=0;j<s.length;j++){
if(s[j]==null)count++;
}
if(count==14){
break a;
}
}
for(int j=0;j<s.length;j++){
if(s[j]!=null){
System.out.println(s[j]);
}
}
}
}
结果展示:
结果为:猴5.