long fn(long n)
for(i=1;i<=n;i++)
return temp; }
搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當 n 很大的時候我這個程式執行效率很低,在嵌入式系統的開發中,程式的執行效率很重要,能讓cpu少執行一條指令都是好的,他讓我看看這個程式還有什麼可以修改的地方,把程式優化一下!
聽了這些話,我的心情當時變的有點沉重,沒想到他的要求很嚴格,之後我對程式進行了嚴格的分析,給出了改進了的方案!
long fn(long n)
while(j<=n)
return temp; }
雖然我不敢保證我這個演算法是最優的,但是比起上乙個程式,我將所有涉及到乘法指令的語句改為執行加法指令,既達到要題目的要求而且運算時間上縮短了很多!而代價僅僅是增加了乙個整型變數!
但是我現在的信心已經受了一點打擊,我將信將疑的看者面試官,他還是微笑著跟我說:「不錯,這個程式確實在效率上有的很大的提高!」我心裡一陣暗喜!
但他接著說這個程式仍然不能達到他的要求,要我給出更優的方案!天啊!還有優化!我當時真的有點崩潰了,想了一會後,我請求他給出他的方案!然後他很爽快的給出了他的程式!
long fn(long n)
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n; }
搞笑,當時我目瞪口呆,沒想到他是這個意思,這麼簡單的**我真的不會寫嗎,但是我為什麼沒有往那方面上想呢!
他說的沒有錯,在 n 很大很大的時候這三個程式執行時間的差別簡直是天壤之別!
當我剛想開口說點什麼的時候,他卻先開口了:「不要認為 cpu 運算速度快就把所有的問題都推給它去做,程式設計師應該將**優化再優化,我們自己能做的決不要讓 cpu 做,因為 cpu 是為使用者服務的,不是為我們程式設計師服務的!」
多麼精闢的語言,我已經不想再說什麼了!
接著是第二個問題:
2) 他要求我用一種技巧性的程式設計方法來用乙個函式實現兩個函式的功能 n 為如:fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6!
fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9! 現在用乙個函式 fn(int n,int flag) 實現,當 flag 為 0 時,實現 fn1 功能,如果flag 為 1 時實現 fn2 功能!他的要求還是效率,效率,效率!
說實在話,如果我心情好的話我應該能給出一種比較好的演算法,但我那時真的沒有什麼心思再想了,我在紙上胡亂畫了一些諸如 6!=6*5! 的公式後直截了當的跟他說要他給出他的答案!
面試官也沒有說什麼,給出了他的思路:
定義乙個二維陣列 float t[2][5] 存入 [2!,3!,4!,5!,6!],[5!,6!,7!,8!,9!] 然後給出乙個迴圈:
for(i=0;i<6;i++)
學程式設計的人不能不看的好文章
long fn long n for i 1 i n i return temp 搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當n 很大的時候我這個程式執行效率很低,在嵌入式系統的開發中,程式的執行效率很重要,能讓cpu少執行一條指令都是好的,他讓我看看這個程式...
學程式設計的人不能不看的好文章
long fn long n for i 1 i n i return temp 搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當 n 很大的時候我這個程式執行效率很低,在嵌入式系統的開發中,程式的執行效率很重要,能讓cpu少執行一條指令都是好的,他讓我看看這個程...
學程式設計的人不能不看的好文章
long fn long n for i 1 i n i return temp 搞定!當我用期待的目光看著面試官的時候,他微笑著跟我說,執行結果肯定是沒有問題!但當 n 很大的時候我這個程式執行效率很低,在嵌入式系統的開發中,程式的執行效率很重要,能讓cpu少執行一條指令都是好的,他讓我看看這個程...