问题:1,2,3,......,n-1,n这n个数字排成一个圆圈,从数字1开始每次从这个圆圈里删除m个数字。求出这个圆圈里剩下的最后一个数字。
思路:利用STL中的list来模拟这个操作。
int Joseph(int n, int m)
{
list<int > numbers;
for(int i = 1; i <= n; i++)
numbers.push_back(i);
list<int >::iterator current = numbers.begin();
list<int >::iterator next;
while(numbers.size() > 1)
{
for(int i = 1; i < m; i++)
{
current ++;
if(current == numbers.end())
current = numbers.begin();
}
cout<<*current<<endl;
next = ++current; //迭代器只能进行++ 不能进行+1
if(next == numbers.end())
next = numbers.begin();
current--;
numbers.erase(current);
current = next;
}
return *current;
}