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

猜你喜欢

转载自blog.csdn.net/qq_31411579/article/details/84889781