猴子选大王
题目描述
N只猴子选大王,选举方法如下:从头到尾1、2、3报数,凡报3的退出,余下从尾到头1、2、3报数,凡报道3退出;余下的从头到尾报数,还是报3的退出;依此类推,当剩下的两只猴子时,取这时报数报的1的为王。若想当猴子,请问当初应占据什么位置?
输入
一个正整数n,(n<=100),n为-1结束。
输出
1-n应占据的位置。
代码
#include<iostream>
#include<algorithm>
using namespace std;
int x[1100],n;
int main()
{
int i,j,k,t,f,s=0;
while(scanf("%d",&n)!=EOF)
{
if(n==-1)
break;
if(n==2 || n==1)
{
cout<<1<<endl;
continue;
}
for(i=1;i<=n;i++)
x[i]=i;
f=1;
while(1)
{
if(f)
{
f=0;
t=1; s=0;
for(i=1;i<=n;i++)
{
if(x[i]==-1)
{
s++; continue;
}
if(t==3)
{
x[i]=-1; t=1; s++;
}
else
t++;
}
if(s==(n-2))
{
for(i=n;i>=1;i--)
{
if(x[i]!=-1)
{
cout<<i<<endl; break;
}
}
break;
}
}
else
{
f=1;
t=1; s=0;
for(i=n;i>=1;i--)
{
if(x[i]==-1)
{
s++; continue;
}
if(t==3)
{
x[i]=-1; t=1; s++;
}
else
t++;
}
if(s==(n-2))
{
for(i=1;i<=n;i++)
{
if(x[i]!=-1)
{
cout<<i<<endl; break;
}
}
break;
}
}
}
}
return 0;
}
本文来自博客园,作者:斯文~,转载请注明原文链接:https://www.cnblogs.com/zhiweb/p/15483380.html

浙公网安备 33010602011771号