CSP 2017.12 第二題 遊戲 java代碼

問題描述
  有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,……,1號小朋友坐在n號小朋友的順時針方向。
  遊戲開始,從1號小朋友開始順時針報數,接下來每個小朋友的報數是上一個小朋友報的數加1。若一個小朋友報的數爲k的倍數或其末位數(即數的個位)爲k,則該小朋友被淘汰出局,不再參加以後的報數。當遊戲中只剩下一個小朋友時,該小朋友獲勝。
  例如,當n=5, k=2時:
  1號小朋友報數1;
  2號小朋友報數2淘汰;
  3號小朋友報數3;
  4號小朋友報數4淘汰;
  5號小朋友報數5;
  1號小朋友報數6淘汰;
  3號小朋友報數7;
  5號小朋友報數8淘汰;
  3號小朋友獲勝。

  給定n和k,請問最後獲勝的小朋友編號爲多少?
輸入格式
  輸入一行,包括兩個整數n和k,意義如題目所述。
輸出格式
  輸出一行,包含一個整數,表示獲勝的小朋友編號。
樣例輸入

5 2

樣例輸出

3

樣例輸入

7 3

樣例輸出

4

數據規模和約定
  對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。

package com.CavellChance.learning;

import java.util.Scanner;

public class PlayGame {
    static int[] children;
    static int n, k, i, num, alive;

    public static void pgame() {
        alive = n;
        int i = 1;
        while (alive > 1){
            ++num;
            while (children[i] != 0) {
                ++i;
                if (i == n + 1)
                    i = 1;
            }

            if (num % k == 0 || num % 10 == k) {
                children[i] = 1;
                --alive;
            } 

            ++i;
            if (i == n + 1)
                i = 1;
        }

    }

    public static void main(String args[]) {
        Scanner xScanner = new Scanner(System.in);

        n = xScanner.nextInt();
        k = xScanner.nextInt();
        children = new int[n + 1];

        pgame();
        for (int i = 1; i <= n; i++) {
            if (children[i] == 0)
                System.out.println(i);
        }

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