我也写了个,感觉挺好理解。
package cn.itcast.day2;
import java.util.*;
/*题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
凡报到3的人退出圈子,问最后留下的是原来第几号的那位。*/
public class WuYi2 {
public static void main(String[] args) {
System.out.println("请输入参加人数:");
//引入扫描器
Scanner input=new Scanner(System.in);
int person=input.nextInt();
//建个boolean类型数组,判断人进出的情况
boolean[] flag=new boolean[person];
for (int i = 0; i < flag.length; i++) {
//将所有都标记成圈内人
flag[i]=true;
}
//依次初始化参加人数、报号数和变化标记
int count=person,number=0,index=0;
//人数必须大于1,基数最少为2
while(count>1){
//从第一个人开始报
if(flag[index]){
//报号数每次增1
number++;
//当报号数为3时
if(number==3){
//当前的人出去
flag[index]=false;
//报号数清零
number=0;
//人数减1
count--;
}
}
index++;
//当索引为数组长度时,取不到人了,数组下标越界,Index归零
if(index==person){
index=0;
}
}
//遍历数组,此时只剩1人
for (int j = 0; j < person; j++) {
if(flag[j]){
System.out.println("原始的数是:"+(j+1));
}
}
}
}
|