程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 有1到100共100個數, 從1開始, 每隔1, 2, 3... 個數拿走一個數, 最後剩下幾?,3..一個數

有1到100共100個數, 從1開始, 每隔1, 2, 3... 個數拿走一個數, 最後剩下幾?,3..一個數

編輯:JAVA綜合教程

有1到100共100個數, 從1開始, 每隔1, 2, 3... 個數拿走一個數, 最後剩下幾?,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 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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved