poj1012 Joseph题解2
2010-08-11 13:03
405 查看
之前用链表模拟了Joseph环,但是代码非常的长。
poj1012 Joseph题解:http://blog.csdn.net/Justmeh/archive/2010/08/11/5803590.aspx
我们注意到题目中并没有要求我们求出最后的剩余的人是第几个,所以与经典的Joseph环还是太一样,我们根本用不着用链表来模拟。只需要一个记录剩余环中的人数的变量即可,这样代码简洁多了,如下:
poj1012 Joseph题解:http://blog.csdn.net/Justmeh/archive/2010/08/11/5803590.aspx
我们注意到题目中并没有要求我们求出最后的剩余的人是第几个,所以与经典的Joseph环还是太一样,我们根本用不着用链表来模拟。只需要一个记录剩余环中的人数的变量即可,这样代码简洁多了,如下:
#include<iostream> #include<vector> using namespace std; int result[13] = {0}; int SolveJoseph(int personNum) { int loopLen = 2*personNum; int m,i = 1; bool succeed ; if(result[personNum-1]) { m = result[personNum-1]; return m; } while(1) { m = (personNum+1)*i; for(int j=0;j<2;j++) { m += j; int next = 0; succeed = true; for(int leftNum = loopLen;leftNum>personNum;leftNum--) { next = (m+next-1)%leftNum; if(next<personNum) { succeed = false; break; } } if(succeed) { result[personNum-1] = m; return m; } } i++; } return m; } int main() { int personNum; vector<int> vm; while(cin>>personNum && personNum>0) { int m = SolveJoseph(personNum); vm.push_back(m); } for(int i=0;i<vm.size();i++) { cout<<vm[i]<<endl; } return 0; }
相关文章推荐
- POJ 1012 Joseph题解与心得
- POJ-1012 Joseph-约瑟夫问题好人坏人
- poj 1012 Joseph
- poj 1012 Joseph
- poj 1012 Joseph
- poj-1012 Joseph
- POJ 1012 Joseph
- poj1012 Joseph
- poj 1012 & hdu 1443 Joseph(约瑟夫环变形)
- POJ 1012 Joseph 约瑟夫问题
- poj 1012 Joseph环问题
- POJ 1012 Joseph
- Poj 1012 Joseph
- POJ 1012 Joseph
- POJ 题目1012Joseph(数学,约瑟夫环)
- poj_1012joseph
- POJ 1012 Joseph
- POJ1012 Joseph
- POJ 1012 Joseph
- POJ 1012 Joseph