你的位置:首页 > Java教程

[Java教程]有1到100共100个数, 从1开始, 每隔1, 2, 3... 个数拿走一个数, 最后剩下几?


最近找实习, 在做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 n10     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