37 有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位.

题目:有n个人围成一圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位.

 1     public class _037NumberOff {
 2 
 3     public static void main(String[] args) {
 4         numberOff();
 5     }
 6 
 7     private static void numberOff() {
 8         Scanner scanner = new Scanner(System.in);
 9         System.out.println("请输入排成一圈的人数: ");
10         int n = scanner.nextInt();
11         fun(n);
12         scanner.close();
13     }
14 
15     private static void fun(int n) {
16 
17         boolean[] arr = new boolean[n];
18 
19         int countNum = arr.length;
20 
21         // 开始都有人,初始化为true
22         for (int i = 0; i < arr.length; i++) {
23             arr[i] = true;
24         }
25 
26         // 数到3去除
27         for (int i = 0, j = 0;; i++) {
28             if (arr[i]) {
29                 j++;
30                 if (j == 3) {
31                     arr[i] = false;
32                     j = 0;
33                     // 删除一人
34                     countNum--;
35                 }
36             }
37 
38             //
39             if (i == arr.length - 1) {
40                 i = -1;
41             }
42 
43             if (countNum == 1) {
44                 break;
45             }
46         }
47 
48         for (int i = 0; i < arr.length; i++) {
49 
50             if (arr[i]) {
51                 System.out.println("原排在第" + (i + 1) + "位的人留下了.");
52 
53             }
54         }
55     }
56 }
原文地址:https://www.cnblogs.com/liuyangfirst/p/6544466.html