题目:
有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;
}