1.题目
按照一定的规则选举班长,规则如下:将班里的N个人围城一圈,顺序编号,从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子,然后从下一个人重新开始,最后留下的那个人就被选为班长。
请问按照这个规则,选出的班长是原来编号为第几号的学生,假设班上有25个人。
2.方法
2.1方法一
思路:首先,把所有人都变成true,一直循环这个数组,当报到3时,那么把这个人变成false。当只剩下一个人时,退出循环。最后,值为true的人就是班长。
下面展示一些 方法一的代码片
。
package HomeWork;
import java.util.Arrays;
public class Six {
public static void main(String[] args) {
//1.定义布尔类型数组,把true赋值给数组中的元素。
boolean[] a=new boolean[25];
Arrays.fill(a,true);
//2.定义报数器k和计数器m(退出的人数)
int k =0,m=0;
while (m<a.length-1){//3.当计数器等于数组长度-1时,即剩下一个人时,退出循环。
for (int i = 0; i <25 ; i++) {
if(a[i]==true) {//4.循环整个数组,每次只让值为true的人报数
k++;
if(k==3){//5.当报的数为3时,那个人退出圈子,给他赋值false,
a[i]=false;
m++;//并让计数器m+1,
k=0;//让报数器变回0,下个人报数就为1.
}
}
}
}
//6.找到那个剩下的人,for循环,值为true时,输出。
for (int i = 0; i <25 ; i++) {
if(a[i]==true){
System.out.println("班长是第"+(i+1)+"号学生");
}
}
}
}
2.1方法二
思路:首先,把所有人按顺序编号,一直循环这个数组,当报到3时,那么把这个人变成0。当只剩下一个人时,退出循环。最后,值大于0的人就是班长。
下面展示一些 方法二的代码片
。
//1.给所有人从1-25进行编号。
int[] a=new int[25];
for (int i = 0; i <25 ; i++) {
a[i]=i+1;
}
//2.定义报数器k和计数器m(退出的人数)
int k =0,m=0;
//3.当计数器等于数组长度-1时,即剩下一个人时,退出循环。
while (m<a.length-1){
//4.循环整个数组,每次只让值大于0的人报数
for (int i = 0; i <25 ; i++) {
if(a[i]>0) {
k++;
//5.当报的数为3时,那个人退出圈子,给他赋值false,
if(k==3){
a[i]=0;
m++;//并让计数器m+1,
k=0;//让报数器变回0,下个人报数就为1.
}
}
}
}
//6.找到那个剩下的人,for循环,值大于0时,输出。
for (int i = 0; i <25 ; i++) {
if(a[i]>0){
System.out.println("班长是第"+a[i]+"号学生");
}
}