题目:
按照一定的规则选举班长,规则如下:将班里的N个人围城一圈,顺序编号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,然后从下一个人重新开始,最后留下的那个人就被选为班长,请问按照这个规则,选出的班长是原来编号为第几号的学生,假设班上有25个人
//分析:
将每个报3的人提出去,并给他们赋值为0;最后剩一个大于0的下标+1就是原先的第几位学生
private static void main1() {
int arr1[]=new int[25];
for (int i = 0; i <25 ; i++) {
arr1[i]=i+1;
}
int count=0;//报数
int num=0;//淘汰人数
while(num<24){ //淘汰人数为24人时游戏结束
for (int i = 0; i <arr1.length ; i++) {
if (arr1[i]!=0) {
++count;//报数
if (count % 3 == 0) {
arr1[i] = 0; //淘汰
num++;
}
}
}
}
for (int i = 0; i < arr1.length ; i++) {
if (arr1[i]>0){
System.out.println("该数学生为原先的"+(i+1)+"位";
}
}
}
结果: 为原先的第14位同学