c语言的问题求大佬教教

题目描述

围绕着山顶有 m (m <= 1000) 个山洞,兔子和狐狸各住在其中的一个山洞中。狐狸总想吃掉兔子。某一天兔子就对狐狸说:“你想吃我有一个条件,你把山洞用 1 到 m 进行编号,我躲在其中的一个山洞中,你每次间隔 n (n < 1000) 个山洞找我,而且每个山洞只能找一次,直到还剩最后一个山洞。只要不是在剩最后一个山洞找到我,我就让你吃掉!”

问:兔子躲在哪个山洞能保证不被吃掉?

输入描述

一行输入两个正整数,两个数之间用一个空格分开,分别表示山洞数和间隔数。

输出描述

一个整数,占一行,表示安全的山洞编号。

样例输入

9 5

样例输出

8

#include<stdio.h>
# include <string.h>
int main()
{
    int m,n;//m个山洞,间隔n
    while(scanf("%d %d",&m,&n)!=EOF)
	{
		int hole[1001]={0};
		int j,c,t,q;
		j=n;
		
		for(int i=1;i<=m-1;i++)//次数
		{
			c=0;
				if(j<=m)
				{
					hole[j]=1;
					t=j+1;
					q=t;
					while(t<j+n+c)
					{
						if(q>m)
							q=q-m;
						if(hole[q]==1)
							c++;
						q++;
						t++;
					}
					j=j+n+c;
				}
				else
				{
					j=j-m;
					hole[j]=1;
					t=j+1;
					q=t;
					while(t<j+n+c)
					{
						if(q>m)
							q=q-m;
						if(hole[q]==1)
							c++;
						q++;
						t++;
					}
					j=j+n+c;
				}
		
		/*		for(int j=1;j<=m;j++)
		{
				printf("%d ",hole[j]);
		}
				printf("\n");*/
		}
		for(int j=1;j<=m;j++)
		{
			if(hole[j]==0)
				printf("%d\n",j);
		}
	}
	return 0;
}

以上是我写的,改了很多遍还是有错,主要是不能解决每个山洞只能抓一次的问题,请大佬指教!

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


bool all_holes[1024]; 
int check_rec=1;
int check_already=0;

void check_hole(int m,int n)
{
	int i=check_rec;
	int rec=0;

	printf("本次检查从%d号开始\n",check_rec+1);
	
	while(rec<n)
	{
		if(all_holes[i]==false)
		{
			printf("%d号没检查过,跳过它\n",i+1);
			rec++;
		}
		i++;
		if(i==m)
		{
			i=0;
		}
	}

	printf("本次检查%d号山洞\n",i+1);
	
	while(true)
	{
		if(all_holes[i]==false)
		{
			all_holes[i]=true;
			check_already++;
			break;
		}
		i++;
		if(i==m)
		{
			i=0;
		}
	}
	
	check_rec=i+1;
	if(check_rec==m)
	{
		check_rec=0;
	}
}

int main()
{
    int m=0;
    int n=0;
	
    int m_check=0;

	int i=0;
	
	printf("输入两个数字,表示山洞数和间隔数:\n");
   	scanf("%d %d",&m,&n);

	//初始化,下标0~m-1表示山洞1~m号
	for(i=0;i<m;i++)
	{
		all_holes[i]=false;
	}
	
	check_hole(m,n);
	
	while(check_already<m-1)
	{
		check_hole(m,n);
	}
	
	for(i=0;i<m;i++)
	{
		if(all_holes[i]==false)
			printf("安全的山洞编号:%d",i+1);
	}	
    return 0;
}

从哪里找来的题目,真挺绕脑子的,