//约瑟夫环.cpp
//2014.7.11 hepanhui
#include <iostream>
#include <list>
using namespace std;
/*算法思路1:
int Josephus(unsigned int n,unsigned int m)
{
if(n < 1 || m < 1)
return -1;
unsigned int i = 0;
list<int> numbers;
//初始化链表
for(i = 0; i < n; i++)
numbers.push_back(i);
list<int>::iterator current = numbers.begin();
while(numbers.size() > 1)
{
for(i = 1; i < m; ++i)
{
current++;
if(current == numbers.end())
current = numbers.begin();
}
list<int>::iterator next = ++current;
if(next == numbers.end())
next = numbers.begin();
current--;
cout << *(current) << endl;
numbers.erase(current);
current = next;
}
return *(current);
} */
int Josephus(unsigned int n, unsigned int m)
{
if(n < 1 || m < 1)
return -1;
int last = 0;
for(int i = 2; i <= n; i++)
last = (last + m) % i;
return last;
}
int main()
{
unsigned int n,m;
cin >> n >> m;
cout << Josephus(n,m) << endl;
return 0;
}
调试中易犯的错误:
思路一的代码还有点问题,提示list iterator not incrementable错误。
找到错误了,
current = numbers.begin();笔误写成==了。