1, 最简单的方法,遍历并删除,代码如下
#include<iostream>
#include<list>
using namespace std;
int servive_cricle(int n, int m){
if(n < 1 || m < 1){
return -1;
}
//create circle
list<int> numbers;
for(int i = 0; i < n; ++i){
numbers.push_back(i);
}
int current = 0;
list<int>::iterator it = numbers.begin();
while(numbers.size() > 1){
for(int i = 1; i < m; ++i){
++it;
if(it == numbers.end()){
it = numbers.begin();
}
}
list<int>::iterator next = ++it;
if(next == numbers.end()){
next = numbers.begin();
}
numbers.erase(--it);
it = next;
}
return *it;
}
int main(){
int last = servive_cricle(5, 3);
cout << last << endl;
return 0;
}