有M(1 000以内)个猴子围成一圈,每个猴子有一个编号,编号从1到M,打算从中选出一个大王。经过协商,决定选大王的规则如下:从第1个猴子开始,每隔N(任意正整数)个,数到的猴子出圈,最后剩下来的就是大王。要求从键盘输入M、N(均为正整数),试编程计算编号为多少的猴子将成为大王。
要求:
1、用变量m表示猴子的个数;变量n表示出圈数数的基数。
2、数数规则:每次从1数到n,当前为n的猴子出圈,若有3个猴子,n为2,猴子编号:1,2,3,出圈猴子的
实现代码如下:
#include<iostream>//猴子选大王vector实现
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int m,n,count;
cin>>m>>n;//获取猴子数量,间隔大小
vector<int> monkey;
for(int i=0;i<m;i++)
monkey.push_back(i+1);//排号
int t=0;
while(m>1){
t+=n-1;//第一只猴子默认报数1
t=t%m;//一旦超过就转回来数
monkey.erase(monkey.begin()+t);//踢掉被选中的猴子
m--;
}
cout<<monkey[0];//输出最后剩下的猴子
}
序号:2,1,猴子大王的序号为3。