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