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