PAT数组-11. 猴子选大王(20)

本文介绍了猴子选大王的算法过程,通过让猴子们围圈报数,每轮报到3的猴子退出,最终剩下的一只成为猴王。算法以N只候选猴子为例,从1号开始,每轮报数到3就淘汰,直到选出猴王。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组-11. 猴子选大王(20)

时间限制
400 ms
内存限制
32000 kB
代码长度限制
8000 B
判题程序
Standard
作者
徐镜春(浙江大学)

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1-N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:

输入在一行中给一个正整数N(<=1000)。

输出格式:

在一行中输出当选猴王的编号。

输入样例:
11
输出样例:
7
#include<stdio.h>
#define size 1001

int main()
{
	int N,i; //n个猴子
	int a[size];
	scanf("%d",&N);

	for(i=0;i<N-1;i++)  //初始化
		a[i]=i;

	int count=0,j=0; //count:计数:退出猴子的个数

	i=0;
	while(1)
	{
		if(a[i%N]!=-1)
		{
			 j++;
			 if(j==3)  //数到3
			{
				j=0;	
				if(count==N-1) //还剩1个数
					break;
				else
				{
					a[i%N]=-1; //数到3的值置为-1
					count++;    
				}
			}
		}

		i++;
	}

	for(i=0;i<N;i++)
		if(a[i]!=-1)
			printf("%d\n",i+1);


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值