今天面试遇到的一题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<Integer> peoples = new ArrayList<Integer>();
19 for (int i = 1; i <= 17; i++) {
20 peoples.add(i);
21 }
22 // 每一轮剩余的人员
23 List<Integer> remainder = new ArrayList<Integer>();
24 // 每一轮离开的人员
25 List<Integer> obsolete = new ArrayList<Integer>();
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<Integer>();
39 obsolete = new ArrayList<Integer>();
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)的人
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~