CCF-201712-2 遊戲
阿新 • • 發佈:2018-11-19
水題打卡
問題描述
試題編號: | 201712-2 |
試題名稱: | 遊戲 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: | 問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,……,1號小朋友坐在n號小朋友的順時針方向。 例如,當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。 |
這裡要考慮n==1和k==1的情況,特判一下就能全過了
ac程式碼:
import java.util.Scanner; public class Main { Scanner sc = new Scanner(System.in); public void solution() { int n = sc.nextInt(); if (n == 1) { //n==1只有一個小朋友那贏的就是它 System.out.println(1); return; } int count = n; int k = sc.nextInt(); if (k == 1) { //k==1每個小朋友一報數就淘汰,所以最後一個小朋友是最後留下來的小朋友將其編號輸出 System.out.println(n); return; } int[] vis = new int[n]; int preNum = 0; int thisNum = 0; while (count > 1) { for (int i = 0; i < n; i++) { if (vis[i] == 0) { thisNum = preNum + 1; if (thisNum % k == 0 || thisNum % 10 == k) { vis[i] = 1; count--; } preNum = thisNum; } } } for (int i = 0; i < n; i++) { if (vis[i] == 0) { System.out.println(i + 1); break; } } } public static void main(String[] args) { Main main = new Main(); main.solution(); } }