标签:
最近找实习, 在做Test Assignment时遇到了这么道题, 就顺便记录下来:
说, 有1到100共100个数, 摆成一个圈. 从1开始, 每隔1, 2, 3, 4 ... 个数拿走一个数, 一直循环, 最后剩下几? 具体的讲就是一开始(隔0个数)把 1 拿走, 隔1个数(2)把3拿走, 再隔2个数(4, 5)把6拿走, 再隔3个数(7, 8, 9)把10拿走. 第一圈数到100之后接着从2开始数, 直到最后剩下1个数为止, 请问最后剩下几? 如果是1到n呢?
1 public static int selectNumber(int n) { 2 3 int result = -1; 4 ArrayList<Integer> nums = new ArrayList<Integer>(); 5 int index = 0; // this variable is used to remove numbers from list 6 int count = 0; // count is used to count which numbers should be remove 7 int pIndex = 0; // this is used to record previous index 8 9 // generate a list contains numbers from 1 to n 10 for(int i = 1; i <= n; i++) { 11 nums.add(i); 12 } 13 14 while(nums.size() > 1) { 15 16 while(index < nums.size()) { 17 nums.remove(index); 18 count++; 19 pIndex = index; 20 index += count; 21 } 22 23 index = count - (nums.size() - pIndex); 24 25 while(index > nums.size() - 1) { 26 index = index - nums.size(); 27 } 28 } 29 30 result = nums.get(0); 31 return result; 32 } 33 34 public static void main(String[] args) { 35 int surviver = selectNumber(100); 36 System.out.println("The surviver is: " + surviver); 37 }
以上就是我的解决方案, 最后留下的数是31
有1到100共100个数, 从1开始, 每隔1, 2, 3... 个数拿走一个数, 最后剩下几?
标签:
原文地址:http://www.cnblogs.com/zhenyu-go/p/5529618.html