问题概述:100个人围成一圈,每隔一个固定的数值报数,报道这个数的人踢出,问踢出顺序是怎样的?
STL的算法,效率奇慢无比。过两天用链表实现改一个C指针的算法。
C++STL的源码
#include#include #define SUM 10000#define M 13using namespace std;int main(){ int p=1,outputi=0; vector myvector,output(SUM,0); for(int i=1;i<=SUM;i++) { myvector.push_back(i); } for(int i=SUM;i>=2;i--) { p=(p+M-1)%i; if(p==0) p=i; output[outputi]=myvector[p-1]; outputi++; myvector.erase(myvector.begin()+p-1); } output[SUM-1]=myvector[0]; return 0;}