1.需求
15只狮子子围成一圈选狮王,依次1-7循环报数,报到7的狮子被淘汰,后面的狮子再从1开始数,直到最后剩一只狮子称为狮王,问:哪只狮子会成为狮王?
2.分析
15只狮子选狮王,可以先定义一个狮王数组,元素为15个,初始值都为0,初始化一个狮子数量为15,定义一个初始报数值为0,然后循环遍历狮子数组,并循环报数到7,每当报到7时,该狮子数组成员变为1,为0的狮子成员减一,然后下次报数的时候跳过,当狮子数量为1时,说明仅剩一个狮子成员为0,此时该成员即为要选出的狮王。
3.代码
public static void main(String[] args) {
int[] lion = new int[15];//定义一个狮子数组,数组元素有15个,初始值都为0
int count = 0;//定义报数初始值为0
int lionNum = lion.length;//初始化狮子数量为狮子数组的长度
while (lionNum != 1) {//当狮子数量不为1时进入循环
for (int i = 0; i < lion.length; i++) {
if (lion[i] != 0) {//狮子数组元素不为0
continue;//结束当次循环
}
count++;//报数的数值加1
if (count % 7 == 0) {//当报数为7时
lion[i] = 1;//当前数组元素变为1
lionNum--;//狮子数量减1
}
}
}//当狮子数量减到1的时候跳出循环
for (int i = 0; i < lion.length; i++) {//找出数组最后剩余的一个为0元素
if (lion[i] == 0) {
System.out.println("狮子王是" + (i + 1));//剩余的0元素即为狮王,其余都已经报数到7变为1
}
}
}