问题的描述:15个猴子围成一圈选大王, 依次1-7循环报数, 报到7的猴子被淘汰, 直到最后一只猴子成为大王。 问: 哪只猴子会成为大王?
本文尝试用boolean数组进行实现,代码如下所示:
package UNI;
import java.util.Arrays;
public class monkey {
public static void main(String[] args) {
//定义一个状态数组(false表示还没被淘汰,false表示已被淘汰)
boolean[] state=new boolean[15];
//报数
int count=0;
//下标
int i=0;
while ((contains(state))) {
//定义一个环形的猴子圈
i=(i==15)?0:i;
//记数
if (!state[i]) {
count++;
}
i++;
if (count%7==0) {
state[i-1]=true;
count=0;
}
if (Num(state)==14) {
break;
}
}
System.out.println(Arrays.toString(state));
}
//构造一个判断是否含有false的方法
private static boolean contains(boolean[] ss) {
for (int i = 0; i < ss.length; i++) {
if (!ss[i]) {
return true;
}
}
return false;
}
private static int Num(boolean[] tt) {
int count=0;
for (int i = 0; i <tt.length; i++) {
count=(tt[i]==true)?(count+1):count;
}
return count;
}
}
运行结果如下:
[true, true, true, true, false, true, true, true, true, true, true, true, true, true, true]
我们可以发现第5只猴子为猴王
本文通过一个具体的算法实例——15只猴子围成一圈,按1-7报数并淘汰报7的猴子,最终选出猴王的过程,介绍了使用boolean数组实现这一问题的方法。最终结果显示第5只猴子成为猴王。

5362

被折叠的 条评论
为什么被折叠?



