狐狸找兔 演算法分析

2022-08-12 15:30:18 字數 903 閱讀 3384

題目:

圍繞著山頂有10個洞,乙隻兔子和乙隻狐狸住在各自的洞裡,狐狸總想吃掉兔子,一天兔子對狐狸說,你想吃我有乙個條件,你先把洞編號1到10,你從第10洞出發,先到第1號洞找我,第二次隔乙個洞找我,第三次隔兩個洞找我,以後依次類推,次數不限,若能找到我你就可以飽餐一頓,在沒找到我之前不能停止,狐狸一想只有10個洞,尋找的次數又不限,哪有找不到的道理,就答應了條件,結果狐狸跑得昏了過去也沒找到兔子,請問兔子躲在哪個洞裡。程式中可假定狐狸找了1000次。

有兩種情況分別對應幾種演算法,如果狐狸超過界限時,比如狐狸在第九個洞,下次尋找如果要去隔n隔洞時,9+n大於10的情況下,狐狸是回到1洞去找還是,從10洞折返回來,以10,9,8,7的順序去找,這就對應兩種演算法

第一種 狐狸 回到1比較簡單,可以把洞延伸看做 1,2,3,4....8,9,10,1,2,3....8,9,10,1,2,3....這種迴圈,所以不存在方向性的問題,只需要根據位移對10求餘,得到實際位移即可,在狐狸新達到的洞做予標記,下次跳過,並在結果輸出時反向篩選得到狐狸無法到達的洞口。

第二種 可以看做是 乙個從 1,2,3...7,8,9,10,9,8,7.....,3,2,1這樣包含18各元素的數列迴圈,這樣也可以消除方向性帶來的麻煩,狐狸可以認為在前面的數列做迴圈,演算法與上方類似。

第三種 就是硬算 定義方向值,求餘得到位移。 實際位移是 a+bi  ,i為方向值,值可以為1和-1,b為求餘後的位移,a為初始位置

目前能想到的是這些方法

下面貼出 基於第二種方法的 c程式

#includevoid main()

; int fox=1;

int place=0;

int weiyi,p;

for(p=0;p<1000;p++)

for(int i=0;i<10;i++)

}

狐狸找句子 c

圍繞著山頂有10個洞,乙隻兔子和乙隻狐狸分別住在洞裡,狐狸總想吃掉兔子,一天,兔子對狐狸說 你想吃掉我有乙個條件,先把洞順序編號,你從最後乙個洞出發,第一次先到第乙個洞找我,第二次隔乙個洞找我,第三次隔兩個洞找我,第四次隔三個洞找我,依此規律類推,尋找次數不限,我躲在乙個洞裡不動,只要你找到我,就可...

C 狐狸找兔子問題

圍繞著山頂有10個洞,乙隻兔子和乙隻狐狸住在各自的洞裡,狐狸總想吃掉兔子,一天兔子對狐狸說,你想吃我有乙個條件,你先把洞編號1到10,你從第10洞出發,先到第1號洞找我,第二次隔乙個洞找我,第三次隔兩個洞找我,以後依次類推,次數不限,若能找到我你就可以飽餐一頓,在沒找到我之前不能停止,狐狸一想只有1...

狐狸找兔子問題 C語言

圍繞著山頂有10個洞,乙隻兔子和乙隻狐狸住在各自的洞裡,狐狸總想吃掉兔子,一天兔子對狐狸說,你想吃我有乙個條件,你先把洞編號1到10,你從第10 洞出發,先到第1號洞找我,第二次隔乙個洞找我,第三次隔兩個洞找我,以後依次類推,次數不限,若能找到我你就可以飽餐一頓,在沒找到我之前不能停止,狐 狸一想只...