兩個有趣的演算法問題

2022-08-20 23:18:10 字數 1120 閱讀 9802

(2023年2月19日註:這篇文章原先發在自己github那邊的部落格,時間是2023年2月5日)

一共是兩道題,第一道是上學期的matlab考試的時候碰到的,另外一道是師弟發的一道數學題的學習筆記,於是找了個時間想了一下,結合網上找到的資料參考。用的是matlab語言。

1.乙隻青蛙,每次可以選擇跳1級或者跳2級,問跳n級一共有多少種方法?

演算法分析:  

這道題當時我在考場上沒有想出來,因為我沒想到會考matlab實現演算法的題目,問了一下程式設計組的同學,得到的答案是可以用二叉樹,但是,至少目前我還沒在matlab裡面見過指標,c++的指標還不是很熟練(ps:現在熟練多了),於是只能換個思路了。

從遞迴的角度去思考,關鍵還是怎麼得到遞推公式,首先跳1級只有1種方法,跳2級有2種方法,接著考慮以前做過的奧數題模型——蝸牛爬井,關鍵在於分析最後一天的情況,在這裡我們也是分析最後幾個台階的情況。青蛙最後會在倒數第2級或者最後1級,因此接近遞迴出口時的方法是有$f(n-1)+f(n-2)$,換言之$f(n)=f(n-1)+f(n-2)$

function answer=test(number)

if number==1

answer=1;

elseif number==2

answer=2;

else

answer=test(number-1)+test(number-2);

end

2.m個相同的蘋果放到n個相同的籃子中,問有多少種分法?

演算法分析:

這裡我參考了網上的資料,寫出乙個比較獨特的遞迴方法。為了具體一點,這裡我舉8個蘋果放到3個籃子裡

8個蘋果3個籃子=8蘋果2籃子+5個蘋果2籃子+2蘋果2籃子=(8蘋果1籃子+6蘋果1籃子)+(3蘋果1籃子+1蘋果1籃子)+(1蘋果1籃子+1蘋果1籃子)=5+3+2=10

(2023年2月19日註:其實這個就是動態規劃......)

answer=0;

if(basket<=1)

answer=1;

return;

end answer=answer+test(i,basket-1);

end

關於矩陣數字的兩個有趣問題

昨天看見網上有兩個貼子,關於矩陣數字的問題,仔細發現兩個試題的演算法很相似。問題1 當引數是1就輸出 1 當引數是2就輸出 222 212 222 當引數是3就輸出 33333 32223 32123 32223 33333 問題2 int i 5 1 2 3 4 5 16 17 18 19 6 1...

MySQL兩個有趣的函式

uuid short 返回 矮的 通用識別符號作為64位無符號整數。返回的值uuid short 屬性返回的字串格式128位識別符號不同。uuid 函式具有不同的唯一性。價值uuid short 如果下列條件成立,則保證是唯一的 這個uuid short 返回值是這樣構造的 server id 25...

兩個古老問題的遞迴演算法。

1.全排列 思路1 遞迴分治 基於交換 include void perm int a,int start,int end void swap int m,int n void output const int a,int size int main perm a,0,5 return 0 void...