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





本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部