hiphopmattshi的专栏

不怕苦,吃苦半辈子,怕吃苦,吃苦一辈子

笔试题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;
}




阅读更多
文章标签: ini
个人分类: 算法学习
想对作者说点什么? 我来说一句

游戏编程 C小程序 猫捉老鼠

2010年09月13日 3.52MB 下载

猫抓老鼠脚本控件

2016年09月25日 126KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭