题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
分析:最后留下的是第n号那位
1 import java.util.Scanner; 2 public class Prog37{ 3 public static void main(String[] args){ 4 System.out.println("请输入排成一圈的人数:"); 5 Scanner scan=new Scanner(System.in); 6 int n=scan.nextInt(); 7 scan.close(); 8 //定义数组变量标识某人是否还在圈内 9 boolean[] isIn=new boolean[n]; 10 for(int i=0;i<isIn.length;i++) {//给数组赋值都为true 11 isIn[i]=true; 12 } 13 //定义圈内人数、报数和索引 14 int inCount=n;//定义圈内人数 15 int countNum=0;//定义报数 16 int index=0;//定义索引 17 //去掉报数为3的人 18 while(inCount>1) { 19 if(isIn[index]) { 20 countNum++;//开始报数 21 if(countNum==3) {//当报数累加到3时 22 countNum=0;//从下一位开始将报数归于0,从1开始重新报数 23 isIn[index]=false;//将此时索引值对应的数改为false 24 inCount--;//圈内一个人改为false后,下次此人便不再进行报数,所以inCount-1 25 } 26 } 27 index++;//索引值+1进行下一次if判断 28 if(index==n) { 29 index=0; 30 } 31 } 32 //遍历数组中最后还是true的值,表示此人还在留在圈中 33 for(int i=0;i<n;i++) { 34 if(isIn[i]) { 35 System.out.println("最后留下的是原来第"+(i+1)+"号的那位"); 36 } 37 } 38 } 39 } 40 /*运行结果 41 请输入排成一圈的人数: 42 7 43 最后留下的是原来第4号的那位 44 */