#include "Josephus.h"
void main()
{
Josephus JosephusTest(10); //设有10个小孩
JosephusTest.Number(4,2); //从第2个小孩开始,数到第4个人出列
}
#include <list>
#include <iostream>
using namespace std;
class Josephus{
public:
Josephus(int);
void Number(int,int);
private:
list<int> Child;
};
Josephus::Josephus(int n)
{
for (int i=1; i<=n; i++)
Child.push_back(i);
}
inline void Josephus::Number(int m, int s)
{
list<int>::iterator iter = Child.begin();
//从S个同学开始
cout << "带“*”的表示被出列同学的编号:" << endl;
for (int i=1; i<s; i++)
iter++;
//开始数数,出列
while (iter != Child.end())
{
for (int j=1; j<m; j++,iter++)
{
if (iter == Child.end()) j--;
else cout << *iter <<" ";
}
if (iter == Child.end()) iter++;
cout << "*" <<*iter << endl;
iter = Child.erase(iter);
if (iter == Child.end()) iter++;
}
}