報數遊戲 有n個孩子站成一圈,從第一個孩子開始順時針方向報數,報到3的人出列,下一個人繼續從1報數, 直到最後剩下一個孩子為止。問剩下第幾個孩子。
阿新 • • 發佈:2019-02-11
執行結果:/* 報數遊戲 有n個孩子站成一圈,從第一個孩子開始順時針方向報數,報到3的人出列,下一個人繼續從1報數, 直到最後剩下一個孩子為止。問剩下第幾個孩子。下面的程式以10個孩子為例,模擬了這個過程, 請完善之(提示:報數的過程被與之邏輯等價的更容易操作的過程所代替)。 */ import java.util.Vector; public class 報數遊戲 { public static void main(String[] args) { Vector a = new Vector(); for (int i = 1; i <= 10; i++) { a.add("第" + i + "個孩子"); } for (;;) { if (a.size() == 1) break; for (int k = 0; k < 2; k++) a.add(a.remove(0)); // 填空 a.remove(0); } System.out.println(a); } }
[第4個孩子]
執行結果:package test01; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class NumberOff { // 開始報數 public static void numberOff(List lis,int m){ while(lis.size()>1){ for(int i=0;i<m-1;i++) lis.add(lis.remove(0)); lis.remove(0); } System.out.println("剩下最後一個人為:"+lis); } // 輸入資料 public static int input(List lis){ Scanner scan = new Scanner(System.in); System.out.print("輸入人數:"); int n = scan.nextInt(); // 輸入人數 System.out.print("輸入報數到 m 出列(m):"); int m = scan.nextInt(); // 輸入報數到 m 出列 for(int i=0;i<n;i++) lis.add(i+1); return m; } public static void main(String[] args){ List lis = new ArrayList(); int m = input(lis); // 輸入資料 numberOff(lis,m); // 開始報數 } }
輸入人數:10
輸入報數到 m 出列(m):4
剩下最後一個人為:[5]