1. 程式人生 > >筆試題1--貓吃老鼠問題

筆試題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;
}