面试题45:圆圈中最后剩下的数字

来源:互联网 发布:亮剑online知乎 编辑:程序博客网 时间:2024/06/11 03:03

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

常规思路:主要list的运用

代码:

#include <iostream> #include <list> using namespace std;int LastRemaining(unsigned int n,unsigned int m){if(n<1 || m<1)return -1;unsigned int i;list<int> numbers;for(i=0;i<n;++i)numbers.push_back(i);list<int>::iterator current=numbers.begin();while(numbers.size() >1){for(int i=1;i<m;i++){current ++;if(current == numbers.end())current=numbers.begin();}list<int>::iterator next=++current;if(next == numbers.end())next=numbers.begin();--current;numbers.erase(current);current=next;}return *(current);}void main(){int result=LastRemaining(5,3);printf("%d\n",result);}

结果:

3
Press any key to continue

原创粉丝点击