ccf-201712-2 遊戲

問題描述
  有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號小朋友獲勝。c++

  給定n和k,請問最後獲勝的小朋友編號爲多少?
輸入格式
  輸入一行,包括兩個整數n和k,意義如題目所述。
輸出格式
  輸出一行,包含一個整數,表示獲勝的小朋友編號。
樣例輸入
5 2
樣例輸出
3
樣例輸入
7 3
樣例輸出
4
數據規模和約定
  對於全部評測用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。spa


#include <bits/stdc++.h>
using namespace std;
int main()
{
    //flag爲淘汰個數 
    int n,k,a[1001]={0},flag = 0,winer;
    cin >> n;
    cin >> k;
    //num計數,number爲個位數 
    int num = 1,number = 1;
    for(int i = 1;i <= n;i++)
    {
        if(flag == n-1 && a[i] != -1)
        {
            winer = i;
            break;
        }
        if(a[i] != -1)
        {
            if(num%k != 0 && number != k)
            {
                a[i] = num; 
            }
            else
            {
                a[i] = -1;
                flag++;
            }   
            num++;  
            number++;
            if(number == 10)
            {
                number = 0;
            }   
        }
        if(i == n)
        {
            i = 0;
        }
    }
    cout << winer << endl;
    return 0;
}
相關文章
相關標籤/搜索