/*#include <iostream>
* Josephus问题:
* 设有n个人围坐一个圆桌周围,现从第1个人开始报数,数到第m的人出列,
* 然后从出列的下一个重新开始报数,数到第m的人又出列……如此重复,直
* 到所有的人全部出列为止。
* 对任意给定的n、m,求按出列次序得到的n个人员的顺序表。
*/
#include <sstream>
#include <list>
using namespace std;
int main(int argc, char** argv) {
if(argc != 3)
{
cout<<"Commandline parameter not correct!"<<endl;
exit(0);
}
int n=0, m=0;
stringstream ss;
ss<<argv[1];
ss>>n;
ss.clear();
ss<<argv[2];
ss>>m;
std::list<int> li;
for(int i=1;i<=n; ++i)
li.push_back(i);
while(li.size()>1)
{
for(int j=1;j<m; ++j)
{
++it;
if (it == li.end())
it = li.begin();
}
// output person who’s going to leave
cout<<*it<<endl;
it = li.erase(it); // erase return the next iterator
if(it==li.end())
it = li.begin();
}
// output last person
cout<<li.front()<<endl;
}