猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让N只选猴子围成一圈,从某位置起顺序编号为1~N号。从第一号开始报数,每轮从1报到m,凡报到m的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
样例输入:
11 3
样例输出:
7
代码编写:
#include <iostream.h>
#include <string.h>
using namespace std;
int main()
{
int c=1,m,b;
int i,n,a[1000];
cin>>n>>m;//n为猴子数,m为所选的数
for(i=0;i<n;i++)
{
a[i]=i+1;
}//给猴子编号
b=n;//剩下猴子的数量
for(ui=0; ; )
{
if(b==1)
{
break;
}//剩余一个的就是大王
if(a[i]!=0)
{
if(c==m)
{
a[i]=0;
c=0;//可重新数数
b--;
}
c++;//循环数
}
i++;
if(i==n)//重新数一圈
{
i=0;
}
}
for(i=0;i<n;i++)
{
if(a[i]!=0)
cout<<a[i];
}
return 0;
}