Java50道经典习题-程序37 报数

题目:有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 */
原文地址:https://www.cnblogs.com/parkour1026/p/10796571.html