题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。
#include<iostream>
#include<list>;
using namespace std;
int lastRemaining(int num, int m){
if(num <= 1){
return num;
}
list<int> integers;
for(int i=0; i<num; i++){
integers.push_back(i);
}
list<int>::iterator currentinteger = integers.begin();
while(integers.size() > 1){
for(int j=1; j<m; j++){
currentinteger++;
if(currentinteger == integers.end()){
currentinteger = integers.begin();
}
}
list<int>::iterator nextinteger = ++currentinteger;
if(nextinteger == integers.end()){
nextinteger = integers.begin();
}
currentinteger--;
integers.erase(currentinteger);
currentinteger = nextinteger;
}
return (*currentinteger);
}
int lastRemaining_solution(int num, int m){
int last = 0;
for(int i=2; i<=num; ++i){
last = (last + m)%i;
}
return last;
}
int main(){
int last = lastRemaining_solution(4, 3);
printf("%d\n", last);
return 0;
}