N只猴子选大王,选举的办法是:
排成一排,从头到尾报数,报到\red mm的倍数的退出,直到全部报完.
然后从尾到头开始逆向报数,同样报到m的倍数的退出。
第三遍从头到尾,第四遍从尾到头,直到最后余下的一只为猴王,编程找出猴王的位置。
二个整数n,m(6≤n≤100000,6≤m≤100)。
退出顺序占一行,数之间有一空格。第二行一个数,即猴王所在位置。
8 5
5 6 2 7 4 8 3
1 代码:
#include <iostream>
using namespace std;
int fn(int a[], int n)
{
int i,j,t=0;
for(i=0;i<=n;i++)
a[i]=1;
for(i=1;i<=n;i++)
{
j=1;
while(j<=3)
{
t=(t+1)%n;
if(a[t]==1)j++;
}
a[t]=0;
}
return t;
}
int main()
{
int n,a[1000],i;
cin>>n;
a[0]=0;
for(i=1;i<=n;i++)
a[i]=i;
i=fn(a,n);
cout<<i;
return 0;
}