報數字遊戲

題目:

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++;
        }
    }

}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章