加载中...

浙江理工大学入队200题——16I

问题 I: 零基础学C/C++172——猴子选大王

题目描述

有n只猴子围成一圈,从1~n编号,大家决定从中选出一个大王。经过协商,决定选大王的规则为:从编号为1的猴子开始报数,报到k的猴子出圈,然后再从下一只开始继续报1到k......最后剩下来的那只就是大王。要求编程从键盘输入n,k,输出成为大王的猴子编号。

输入

一行输入2个正整数n和k 2<=n<=1000,2<=k<=103

输出

一行一个正整数,表示猴王的编号

样例输入 Copy

3 2

样例输出 Copy

3
提示
本题可以用循环链表实现

题解

不用看循环链表,这个到时候你会学的,这道题目的话如果直接(j+k)%n会错误,是因为a[X]=0的猴子已经出列,不能再算了
所以我们+1+1的来判断,虽然麻烦但是有用。

代码(AC)

点击查看代码
#include<stdio.h>
const int N = 100010;
int a[N];
int main()
{
	int n,k,j=0,cnt=1;
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++)
	{
		a[i]=1;
	}
	int sum=n;
	while(sum>1)
	{
		if(a[j]==1&&cnt==k)
		{
			a[j]=0;
			cnt=1;
			sum--;
		}
		else if(a[j]==1)
		{
			cnt++;
		}
		j++;
		j=j%n;
	}
        for(int i=0;i<n;i++)
	{
		if(a[i]==1)
		{
			printf("%d\n",i+1);
		}
	}
	return 0;
}

posted @ 2022-10-30 11:29  shany212  阅读(37)  评论(0编辑  收藏  举报