n个人围坐,从第一个人开始报数,数到m的人出列,再从下一个人开始重新报数,求出列顺序。
/**
joseph(A,B,jumNum) A为输入的list,B为输出的list
while(!B.empty())
for(i=0...jumNum-1)
iter++;
if(iter==A.end) 以下两行,是保持循环
iter=A.begin
B.push(*iter)
A.erase(iter);
*/
template<class T>
void joseph(list<T>& a, list<T>& b, int jumNum){
list<T>::iterator iter=a.begin();
list<T>::iterator temp;
while(!a.empty()){
for(int i=0;i<jumNum;i++){
iter++;
if(iter==a.end())
iter=a.begin();
}
b.push_back(*iter);
temp=iter;
iter++;
if(iter==a.end())
iter=a.begin();
a.erase(temp);
}
}