1. 程式人生 > >ccf認證 201712-2 遊戲

ccf認證 201712-2 遊戲

 

 我的解題思路是,使用一個vector存放遊戲人數,while迴圈以是否只剩下一人為條件,在迴圈裡將不被淘汰的人存放到一個新的vector,繼續遍歷該新vector直到只剩下一人。

該演算法只得90分,因為我遺漏了一種情況,但所有人滿足淘汰條件時都會被淘汰掉,但是理應最後一人勝出。

該演算法太冗餘,沒必要將勝出的人存放到新的vector,將滿足淘汰條件的人刪除即可。

#include <iostream>
#include <vector>
using namespace std;
bool isFail(int num,int k){
    if(num % k == 0 || num % 10 == k)
        return true;
    else
        return false;
}
int main(){
    int n,k,rank = 1,p;
    cin >> n >> k;
    vector<int> people;
    vector<int> temp;
    for(int i=0;i<n;i++){
        p = i+1;
        people.push_back(p);
    }

    while(people.size() > 1){
        for(int i=0;i<people.size();i++){ 
            if(!isFail(rank,k))     //如果是淘汰數  
                 temp.push_back(people[i]);
            if(temp.empty() && i == people.size()-1){
                temp.push_back(people[i]);
            }    
            rank++;
        }
        for(int i=0;i<temp.size();i++){
         cout << temp[i];
        }
        cout << "\n";
        people = temp;
        temp.clear();    
    }
    for(int i=0;i<people.size();i++){
         cout << people[i];
    }
    cout << "\n";
    cout << people[0];
    return 0;
}