17個人圍成一個圈,編號爲1-17,從第一號開始報數,報到3的倍數的人離開,一直數下去直到最後剩下一個人,此人的編號是多少,請編程輸出結果。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
* @author agrimony
*
*/
public class AGame {
/**
* @param args
*
*/
public static void main(String[] args) {
// 原來總人員
List<Integer> peoples = new ArrayList<Integer>();
for (int i = 1; i <= 17; i++) {
peoples.add(i);
}
// 每一輪剩餘的人員
List<Integer> remainder = new ArrayList<Integer>();
// 每一輪離開的人員
List<Integer> obsolete = new ArrayList<Integer>();
int index = 1;
int count = 1;
while (true) {
// 最後剩下一個時結束
if (remainder.size() == 1) {
System.out.println("^_^遊戲結束,最後剩下編號爲(" + remainder.get(0)
+ ")的人");
break;
}
if (index > 1) {
peoples = remainder;
remainder = new ArrayList<Integer>();
obsolete = new ArrayList<Integer>();
}
System.out.println("============>第" + count + "輪開始");
for (int j = 0; j < peoples.size(); j++) {
int num = peoples.get(j);
if (index % 3 != 0) {
System.out.println("編號(" + num + ")的人唸到:" + index);
remainder.add(num);
} else {
System.out.println("編號(" + num + ")的人唸到:" + index
+ "--->離開 ");
obsolete.add(num);
}
index++;
}
System.out.println("<============第" + count + "輪結束\n剩下"
+ remainder.size() + "個人:" + remainder.toString());
System.out.println("淘汰" + obsolete.size() + "個人:"
+ obsolete.toString());
count++;
}
}
}