题目: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;
}