n只猴子要选大王,选举方法如下:所
有猴子按 1,2 ……… n 编号并按照顺序围成一圈,
从第 k 个猴子起,由1开始报数,报到m时,该猴子就跳出圈外,
下一只猴子再次由1开始报数,
如此循环,直到圈内剩下一只猴子时,这只猴子就是大王。
#include<iostream> #include<vector> using namespace std; int main() { int m,n; cin>>m>>n; vector<int> v; for(int i=1; i<=m; i++) { v.push_back(i); } int t=1; while(m>1) { t+=n-1; t=!(t%m)?m:t%m; v.erase(v.begin()+t-1); m--; } cout<<v[0]<<endl; return 0; }
其实题目的思想很简单,但是花了两个多小时才完成!!!
突破口1:一点点数学技巧
突破口2:使用vector容器
第一次看到题目后就想到了list,折腾了一个多小时还是不行,不得不转变思路。。
于是用了和数组最相近的vector容器,还真就成功了,哈哈!!
原文:http://www.cnblogs.com/fengyanlover/p/4943670.html