面试题45:约瑟夫环

来源:互联网 发布:手机怎么联系淘宝卖家 编辑:程序博客网 时间:2024/05/19 18:45

问题:1,2,3,......,n-1,n这n个数字排成一个圆圈,从数字1开始每次从这个圆圈里删除m个数字。求出这个圆圈里剩下的最后一个数字。


思路:利用STL中的list来模拟这个操作。

int Joseph(int n, int m){    list<int > numbers;        for(int i = 1; i <= n; i++)        numbers.push_back(i);        list<int >::iterator current = numbers.begin();    list<int >::iterator next;    while(numbers.size() > 1)    {        for(int i = 1; i < m; i++)        {            current ++;            if(current == numbers.end())                current = numbers.begin();                    }        cout<<*current<<endl;        next = ++current;  //迭代器只能进行++ 不能进行+1        if(next == numbers.end())            next = numbers.begin();        current--;        numbers.erase(current);        current = next;            }        return *current;}

0 0
原创粉丝点击