约瑟夫环问题

来源:互联网 发布:数据分析 考研专业 编辑:程序博客网 时间:2024/04/28 16:29
题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始,每次从这个圆圈中删除第 m 个数字(第一个
为当前数字本身,第二个为当前数字的下一个数字) 。 当一个数字删除后,从被删除数字的下一个继续删除

第 m 个数字。求出在这个圆圈中剩下的最后一个数字

思路:这就是约瑟夫环问题,使用STL中的list来解决,是最基础的解决办法

int Joseph(list<int>& ring,int k){list<int>::iterator itr = ring.begin(),temp;int m;while(ring.size() >1){m =1;if(itr == ring.end())itr = ring.begin();while(m <k){if(itr == ring.end())itr =ring.begin();itr++;m++;if(itr == ring.end())itr =ring.begin();}temp = itr;itr++;ring.erase(temp);}itr = ring.begin();return *itr;}


1 1