一队士兵被敌人包围,围成一个圈使用Josephus知道最后一个士兵去报信
Josephus#include <iostream> #include <list> using namespace std; 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_front(*iter); temp=iter; iter++; if(iter==a.end()) iter=a.begin(); a.erase(temp); } } int main(){ list<int> a;//use for list<int> b;// for (int i=0;i<7;i++) { a.push_back(i+1); } joseph(a,b,4); list<int>::iterator it=b.begin(); while (it!=b.end()) { cout<<"这个出去报信的士兵是:"<<*it<<endl; it++; } }