筆試題1--貓吃老鼠問題
阿新 • • 發佈:2018-12-26
題目:
有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; }