約瑟夫問題——使用STL鏈表解決
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);
}
}
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);
}
}
posted on 2008-10-23 13:41 deep2 閱讀(2197) 評論(3) 編輯 收藏 引用 所屬分類: 鏈表