问题及代码:
文件名称:main.cpp
作者:郑孚嘉
问题描述:
一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。 要求采用数组作为存储结构完成。
代码:
#include <iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
if(n==1)
{
cout<<m<<endl;
}
else
{
cout<<"出列顺序: ";
int i,monkey[m+1];
for(i=1;i<=m;i++)
{
monkey[i]=i;
}
int js=0,wz=1,hz=m; //js表示计数,wz每次都会加1,js达到n时,在wz上的猴子被淘汰,数组中置为0。
while(hz>1)
{
if(wz>m) //wz>m时,重新循环
{
wz=1;
}
if(monkey[wz]!=0)//只有当循环到没被淘汰的猴子时,js才++;
{
js++;
}
if(js==n)
{
monkey[wz]=0;
cout<<wz<<" ";
hz--;
js=0;
}
wz++;
}
cout<<endl;
for(i=1;i<m+1;i++)
{
if(monkey[i]!=0)
cout<<"大王! "<<i<<endl;
}
}
}
运行结果:
知识点总结:
将被淘汰的猴子置为0,在计数时跳过0的位置就可以了。