Adobe的一道筆試題

2023-02-02 11:39:04 字數 1382 閱讀 1683

=n-1

(注:表示乙個矩陣。在矩陣中第一行第一列是f(n+1),第一行第二列是f(n),第二行第一列是f(n),第二行第二列是f(n-1)。)

有了這個公式,要求得f(n),我們只需要求得矩陣的n-1次方,因為矩陣的n-1次方的結果的第一行第一列就是f(n)。這個數學公式用數學歸納法不難證明。感興趣的朋友不妨自己證明一下。

現在的問題轉換為求矩陣的乘方。如果簡單第從0開始迴圈,n次方將需要n次運算,並不比前面的方法要快。但我們可以考慮乘方的如下性質:

/ an/2*an/2 n為偶數時

an=\ a(n-1)/2*a(n-1)/2 n為奇數時

要求得n次方,我們先求得n/2次方,再把n/2的結果平方一下。如果把求n次方的問題看成乙個大問題,把求n/2看成乙個較小的問題。這種把大問題分解成乙個或多個小問題的思路我們稱之為分治法。

這樣求n次方就只需要logn次運算了。

實現這種方式時,首先需要定義乙個2×2的矩陣,並且定義好矩陣的乘法以及乘方運算。當這些運算定義好了之後,剩下的事情就變得非常簡單。完整的實現**如下所示。

#include

// a 2 by 2 matrix

struct matrix2by2

long long m_00;

long long m_01;

long long m_10;

long long m_11;

};// multiply two matrices

// input: matrix1 - the first matrix

// matrix2 - the second matrix

//output: the production of two matrices

matrix2by2 matrixmultiply

(const matrix2by2& matrix1,

const matrix2by2& matrix2

)// the nth power of matrix

// 1 1

// 1 0

matrix2by2 matrixpower(unsigned int n)

else if(n % 2 == 0)

else if(n % 2 == 1)

return matrix;

}// calculate the nth item of fibonacci series using devide and conquer

long long fibonacci_solution3(unsigned int n)

;if(n < 2)

return result[n];

matrix2by2 powernminus2 = matrixpower(n - 1);

return}

月薪三萬的一道面試題

小明和小強都是張老師的學生,張老師的生日是m月n日,2人都知道張老師的生日 是下列10組中的一天,張老師把m值告訴了小明,把n值告訴了小強,張老師問他們知道他的生日是那一天嗎?3月4日 3月5日 3月8日 6月4日 6月7日 9月1日 9月5日 12月1日 12月2日 12月8日 小明說 如果我不知...

一道銀監會面試題

2010國家公 銀監會面試真題解析題目 你新參加工作,領導交給你一項任務,要求寫乙份關於銀行監管的規章制度,沒有範本,沒有依照,你怎麼做?解析 本題屬於情景處理兼壓力型試題,重在考查考生面對壓力情景的實際處理能力,同時本題也從側面考查了考生的計畫組織協調能力。解題思路 由於本題具有專業部門的針對性,...

一道終身受用的面試題

為什麼不說服醫生救治老人,自己帶著夢中情人離開?醫生沒有工具就像戰士沒有槍一樣啊。你認為在那種地方有救助這個老人的條件嗎?我覺得這是乙個很好的題目,開拓了我們的思維,也考驗了乙個人的品質。這道題很受用,但在美國汽車只是乙個代步的普及工具,遠沒有其他來得重要,比如夢中情人。在美國人的角度,可能較容易回...