题目描述
N只猴子选大王。选举办法如下:从头到尾1、2、3报数,凡报3的退出,余下的从尾到头1、2、3报数,凡报3退出;余下的又从头到尾报数,还是报3的退出;依此类推,当剩下的两只猴子时,取这时报数报1的为王。若想当猴王,请问当初应占据什么位置?
输入
猴子总数N,N<1000。
输出
猴王所在的位置。
样例输入 Copy
10
样例输出 Copy
8
提示
【样例分析】:十只猴子1-10编号,则出圈的次序为
猴子编号:1 2 3 4 5 6 7 8 9 10
出圈次序:3 6 9 7 2 5 4 10 剩下8和1时,8号猴子报1为大王
#include<bits/stdc++.h>
using namespace std;
int n,m=3,b,a[10000],s=1,x;
bool d;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
a[i]=i;
b=n;
while(b>2)
if(d==0)
{
s=1;
for(int i=1;i<=n;i++)
{
if(a[i])
s++;
if(s>m)
{
s=1;
a[i]=0;
b--;
d=1;
}
}
}
else
{
s=1;
for(int i=n;i>=1;i--)
{
if(a[i])
s++;
if(s>m)
{
s=1;
a[i]=0;
b--;
d=0;
}
}
}
if(d==0)
{
for(int i=1;i<=n;i++)
if(a[i]!=0)
{
cout<<i;
return 0;
}
}
else
{
for(int i=n;i>=1;i--)
if(a[i]!=0)
{
cout<<i;
return 0;
}
}
return 0;
}