题目描述:
N只猴子选大王,选举办法如下:从头到尾1、2、3报数,凡报3的退出,余下的从尾到头1、2、3报数,凡报3退出;余下的又从头到尾报数,还是报3的退出;依此类推,当剩下的两只猴子时,取这时报数报1的为王。若想当猴王,请问最初占据什么位置?
输入格式:
输入一个数,表示有n只猴子
输出格式:
输出一个数
样例输入:
10
样例输出:
8
提示:
n<=1000
时间限制: 1000ms
空间限制: 128MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[1001],n,m,x,s=0;
cin>>n;
x=n;
for(int i=0;i<n;i++){
a[i]=1;
}
while(1){
s=0;
for(int i=0;i<n;i++){
s=s+a[i];
if(x==2&&s==1){
cout<<i+1;
return 0;
}
if(s==3){
a[i]=0;
s=0;
x--;
}
}
s=0;
for(int i=n-1;i>=0;i--){
s=s+a[i];
if(x==2&&s==1){
cout<<i+1;
return 0;
}
if(s==3){
a[i]=0;
s=0;
x--;
}
}
}
return 0;
}