笔试题1--猫吃老鼠问题

题目:

     有N个老鼠,排成一队,按顺序,1,2....N  。一只猫从任意位置开始吃,每隔一个吃一个,循环吃。例如:

    老鼠有1,2,3,4,5,6,7个,从第二个开始吃,则吃的顺序为:2,4,6,1,5,3,7


思路:

    从某一个位置first开始吃的话,间隔一个在next处继续吃。那么这道题关键是要找到下一个开始吃的位置在哪里。

   可能遇到的情况,first与next间间隔为1,这个1指的是没有被吃掉的老鼠数目为1个,而不是我们认为的间隔距离为1,这里间隔距离可能有多个。

   现在就有如下问题,如何确定开始的位置?如何查找下一个位置?如何设置循环次数?

  1 开始位置已经给定

  2下一个位置那么我们就需要遍历开始位置后面的位置,如果有老鼠,那么ok,那么该老鼠我不处理,但是邻近该老鼠的下一个我会吃掉它。那么这时候就需要设置一个变量,来记录哪些老鼠可以吃,哪些不可以吃。所以设置一个eat_interval间隔标志,当我吃了一个老鼠,那么间隔标志为0,我遍历邻近的位置,找到一个没有吃的老鼠,此时我不吃它,但是间隔标志变为1,下一个就是可以吃掉的了。

3 没吃掉一个总次数减一,我用总次数做循环变量

 

代码如下:

#include "stdafx.h"
#include "stdio.h"
#define N 4
void Mouse_eat(int *Array,int Number,int start)
{
	int eat_interval = 1;
	int n = Number;
	while(n)
	{
		if(Array[start]&&eat_interval==1)
		{
			printf("%d \t",start);
			Array[start] =0;
			eat_interval = 0;
			start=(start+1)%Number;
			n--;
		}
		else if(Array[start]&&eat_interval==0)
		{
			start=(start+1)%Number;
			eat_interval =1;
		}
		else if(!Array[start])
		{
			start=(start+1)%Number;	
		}
		
		
	}
}
int main(int argc, char* argv[])
{
	int Array[N];
	int i=0;
	int start =1;
	for(i=0;i<N;i++)
	{
		Array[i] = 1;
	}
	Mouse_eat(Array,N,start);

	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值