猴子选大王题解:
猴子大王是最后剩余两只猴子中选,我们需要模拟猴子退出的过程。
开一个bool 数组 a[1010] 来标记猴子是否退出。 我们要开一个计数器来记录 mark来记录当前还有多少只猴子。
cin>>n;
mark=n;
for(int i=1;i<=1010;i++) a[i]=true;
然后模拟整个过程即可。
具体模拟时,我们开一个计数器来记录是第几次开始重新找,如果次数为奇数,就从头到尾找要退出的猴子,如果为偶数就是从尾到头找要退出的猴子
具体代码:
while(mark>2)
{
if(j%2) counta();
else countb();
j++;
}
counta 为从头到尾找要退出的猴子:
void counta()
{
int i=1,k=0;
for(int i=1;i<=n;i++)
if(a[i]) if(++k==3) { a[i]=false; k=0; mark--;}
}
countb 只需要改一下循环的顺序即可。
最后 while(mark>2) 循环结束后,表明现在只有两只猴子
if(j%2) 从1到n找第一个没退出的猴子
else 从n到1找第一个没退出的猴子
输出即可。