我的解题思路是,使用一个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;
}