约瑟夫问题I

题目描述

约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。

给定两个int nm,代表游戏的人数。请返回最后一个出局的人的编号。保证n和m小于等于1000。

测试样例:
5 3
返回:4
经典解法:用环形链表模拟圆圈
 
   
class Joseph
{
public:
    int getResult(int n, int m)
    {
        listjoseph;
        for(int i=1;i<=n;i++)
            joseph.push_back(i);
        list::iterator it=joseph.begin();
        while(joseph.size()>1)
        {
            for(int i=0;i::iterator next=++it;
            if(next==joseph.end())
                next=joseph.begin();
            --it;
            joseph.erase(it);
            it=next;
        }
        return joseph.front();
    }
};

你可能感兴趣的:(约瑟夫问题I)