今天面试遇到的一题Java编程题(报数字游戏)

题目:

17个人围成一个圈,编号为1-17,从第一号开始报数,报到3的倍数的人离开,一直数下去直到最后剩下一个人,此人的编号是多少,请编程输出结果。

自己整理的结果,可惜现场做完交试卷了,才发现有个地方写错了,囧!:

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.List;
 4 
 5 /**
 6  * 
 7  * @author agrimony
 8  * 
 9  */
10 public class AGame {
11 
12     /**
13      * @param args
14      * 
15      */
16     public static void main(String[] args) {
17         // 原来总人员
18         List peoples = new ArrayList();
19         for (int i = 1; i <= 17; i++) {
20             peoples.add(i);
21         }
22         // 每一轮剩余的人员
23         List remainder = new ArrayList();
24         // 每一轮离开的人员
25         List obsolete = new ArrayList();
26 
27         int index = 1;
28         int count = 1;
29         while (true) {
30             // 最后剩下一个时结束
31             if (remainder.size() == 1) {
32                 System.out.println("^_^游戏结束,最后剩下编号为(" + remainder.get(0)
33                         + ")的人");
34                 break;
35             }
36             if (index > 1) {
37                 peoples = remainder;
38                 remainder = new ArrayList();
39                 obsolete = new ArrayList();
40             }
41             System.out.println("============>第" + count + "轮开始");
42             for (int j = 0; j < peoples.size(); j++) {
43                 int num = peoples.get(j);
44                 if (index % 3 != 0) {
45                     System.out.println("编号(" + num + ")的人念到:" + index);
46                     remainder.add(num);
47                 } else {
48                     System.out.println("编号(" + num + ")的人念到:" + index
49                             + "--->离开 ");
50                     obsolete.add(num);
51                 }
52                 index++;
53             }
54 
55             System.out.println("<============第" + count + "轮结束\n剩下"
56                     + remainder.size() + "个人:" + remainder.toString());
57             System.out.println("淘汰" + obsolete.size() + "个人:"
58                     + obsolete.toString());
59             count++;
60         }
61     }
62 
63 }

程序输出结果:

 1 ============>第1轮开始
 2 编号(1)的人念到:1
 3 编号(2)的人念到:2
 4 编号(3)的人念到:3--->离开 
 5 编号(4)的人念到:4
 6 编号(5)的人念到:5
 7 编号(6)的人念到:6--->离开 
 8 编号(7)的人念到:7
 9 编号(8)的人念到:8
10 编号(9)的人念到:9--->离开 
11 编号(10)的人念到:10
12 编号(11)的人念到:11
13 编号(12)的人念到:12--->离开 
14 编号(13)的人念到:13
15 编号(14)的人念到:14
16 编号(15)的人念到:15--->离开 
17 编号(16)的人念到:16
18 编号(17)的人念到:17
19 <============第1轮结束
20 剩下12个人:[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17]
21 淘汰5个人:[3, 6, 9, 12, 15]
22 ============>第2轮开始
23 编号(1)的人念到:18--->离开 
24 编号(2)的人念到:19
25 编号(4)的人念到:20
26 编号(5)的人念到:21--->离开 
27 编号(7)的人念到:22
28 编号(8)的人念到:23
29 编号(10)的人念到:24--->离开 
30 编号(11)的人念到:25
31 编号(13)的人念到:26
32 编号(14)的人念到:27--->离开 
33 编号(16)的人念到:28
34 编号(17)的人念到:29
35 <============第2轮结束
36 剩下8个人:[2, 4, 7, 8, 11, 13, 16, 17]
37 淘汰4个人:[1, 5, 10, 14]
38 ============>第3轮开始
39 编号(2)的人念到:30--->离开 
40 编号(4)的人念到:31
41 编号(7)的人念到:32
42 编号(8)的人念到:33--->离开 
43 编号(11)的人念到:34
44 编号(13)的人念到:35
45 编号(16)的人念到:36--->离开 
46 编号(17)的人念到:37
47 <============第3轮结束
48 剩下5个人:[4, 7, 11, 13, 17]
49 淘汰3个人:[2, 8, 16]
50 ============>第4轮开始
51 编号(4)的人念到:38
52 编号(7)的人念到:39--->离开 
53 编号(11)的人念到:40
54 编号(13)的人念到:41
55 编号(17)的人念到:42--->离开 
56 <============第4轮结束
57 剩下3个人:[4, 11, 13]
58 淘汰2个人:[7, 17]
59 ============>第5轮开始
60 编号(4)的人念到:43
61 编号(11)的人念到:44
62 编号(13)的人念到:45--->离开 
63 <============第5轮结束
64 剩下2个人:[4, 11]
65 淘汰1个人:[13]
66 ============>第6轮开始
67 编号(4)的人念到:46
68 编号(11)的人念到:47
69 <============第6轮结束
70 剩下2个人:[4, 11]
71 淘汰0个人:[]
72 ============>第7轮开始
73 编号(4)的人念到:48--->离开 
74 编号(11)的人念到:49
75 <============第7轮结束
76 剩下1个人:[11]
77 淘汰1个人:[4]
78 ^_^游戏结束,最后剩下编号为(11)的人

 

 

转载于:https://www.cnblogs.com/agrimony/archive/2013/04/28/3049874.html

你可能感兴趣的:(今天面试遇到的一题Java编程题(报数字游戏))