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);
}
}