码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-26 08:43:42      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!