今天面试遇到的一题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)的人