剑指offer-44 圆圈中最后剩下的数字
2015-04-27 15:08
225 查看
#include <iostream> #include <list> using namespace std; /* 转化成约瑟夫环问题求解 */ int LastRemaining_2(unsigned int n,unsigned int m); int LastRemaining(unsigned int n,unsigned int m); int LastRemaining(unsigned int n,unsigned int m) { if(n<1 || m<1) return -1; //构建链表 list<int> numbers; for(unsigned int 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(); } //删除第m个元素 list<int>::iterator next = ++current; if(next==numbers.end()) next = numbers.begin(); numbers.erase(--current); current = next; } return *current; } /* 第二种方法,推导过程很麻烦 */ int LastRemaining_2(unsigned int n,unsigned int m) { if(n<1 || m<1) return -1; int last = 0; for(int i = 2;i<=n;i++) last = (last+m) % i; return last; } int main() { cout<<LastRemaining(5,3)<<endl; cout<<LastRemaining_2(5,3); return 0; }
相关文章推荐
- 剑指offer-面试题45-圆圈中最后剩下的数字
- 剑指offer之面试题45圆圈中最后剩下的数字
- 剑指Offer面试题45:圆圈中最后剩下的数字
- <未完成状态>剑指offer_圆圈中最后剩下的数字(约瑟夫问题)
- 剑指offer--圆圈中最后剩下的数字
- 剑指Offer 45圆圈中最后剩下的数字
- 剑指offer 45. 圆圈中最后剩下的数字
- [剑指offer] 圆圈中最后剩下的数字
- 【剑指Offer学习】【面试题45:圆圈中最后剩下的数字(约瑟夫环问题)】
- 剑指offer——面试题47:圆圈中最后剩下的数字
- 【剑指Offer】面试题45:圆圈中最后剩下的数字
- 剑指offer面试题目:圆圈中最后剩下的数字(约瑟夫环)
- 【剑指offer】6.4抽象建模能力——面试题45:圆圈中最后剩下的数字
- 剑指offer 6.4 抽象建模能力3 -圆圈中最后剩下的数字
- 剑指Offer:面试题45 圆圈中最后剩下的数字
- 剑指Offer-62:圆圈中最后剩下的数字
- 剑指offer——面试题45:圆圈中最后剩下的数字
- 剑指Offer——圆圈中最后剩下的数字
- 剑指offer——圆圈中最后剩下的数字
- 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解