题目:
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++;
}
}
}