華為實習生面試題 跳躍比賽 C 實現

2021-08-18 13:03:54 字數 1572 閱讀 8521

師兄參加了華為的實習生招聘,我也蹭了一下熱鬧。

給出一組正整數,你從第乙個數向最後乙個數方向跳躍,每次至少跳躍1格,每個數的值表示你從這個位置可以跳躍的最大長度。計算如何以最少的跳躍次數跳到最後乙個數。

第一行表示有多少個數n

第二行開始依次是1到n個數,乙個數一行

輸出一行,表示最少跳躍次數。

輸入輸出

說明7表示接下來要輸入7個正整數,從2開始。數字本身代表可以跳躍的最大步長,此時有2種跳法,為2-2-2-5和2-3-2-5都為3步。

一開始看到這題就覺得難受,好麻煩的題目,師兄和我說是用動態規劃做,要寫出迭代方程什麼的。

仔細想過之後,想起運籌學中確實是這麼解這一類題的,不過那是把方案一起解出來了——也就是題中的「2-2-2-5和2-3-2-5」。可是題目要求的答案只是「最少跳躍次數」,並沒有說要給出方案,說明還是可以取巧的。

先整理一下規律,假設第i步到達了第k個位置(從0開始編號),那麼前面所有的位置應該都能在第i步或第i步之前到達,在下圖中標為橙色。

下面開始走一邊用例。第0步,此時能到達的點就是起點,所以也就第乙個點被標記。同時可以計算出下一step能到達的最遠位置為2(第乙個格仔的位置0 + 該格中的數字2),也就是從左到右數第3個格仔,接下來把能到達的格仔塗色。

更進一步。在橙色區域迴圈,計算出下一步最遠能到達的點,第二個格仔和第三個格仔都符合要求,繼續把能到達的格仔標為橙色。

那麼什麼時候可以停止迴圈呢?很簡單,只要最後乙個格仔變成橙色就結束迴圈了,也就是step_max >= n-1。

當然,當step=3時,就得到想要的結果了,此時也知道了最少需要跳躍3次才能到達終點。

以上的式子都是基於從0編號這一條件的,所以程式設計時我也從0開始編號。

就直接貼上**啦

#include #include using namespace std;

int main()

// 迴圈,當到達末尾時跳出迴圈

int step = 0;

int out = 0;

int step_max = 0;

while (true)

} out = step_max;

if (out + 1 >= len)

} // 輸出結果

cout << step << endl;

system("pause");

return 0;

}

華為實習生面試經歷

下午兩點二十的面試,早上七點過就起了,吃了個愉快的早餐,9點就出發了。十一點半到了華為,姐夫接了我,帶我逛了逛華為,吃了頓午飯,就去一號門排隊面試了。排隊排到了4點,終於輪到我了,等待的時候還碰到了兩位本校研究生部的學長,其中一位筆試582,沒有滿分是因為看錯了乙個需求 面試就兩場,一場是技術面,一...

cvte c 實習生面試題目

這個面試是 面的,一開始問了有關的專案經歷之後就開始問以下的這些問題,整個面試過程大約30分鐘。在c 中,源程式變為可執行程式的正確順序 虛函式,純虛函式,多型性 函式過載 堆疊智慧型指標 種類,實現原理 malloc free和 new delete的區別 c和c 的區別 常見的stl函式 如何寫...

華為通用軟體開發實習生面試題

技術面手撕 的原題 要求用c 寫 樓主比較菜面試時候又比較緊張面試官又看著我寫,因此當場只寫出來乙個通用的解法,本以為面試官會讓我優化時間複雜度,結果沒有,只是測試了一下我的 每個測試點都通過了 我的想法是,因為要求最大公共字首嘛,結果肯定不可能比這些字串中最短的長,所以首先求出最短的字串長度假設長...