#include#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) int array[] = {23,34,12,17,204,99,16}; int main() { int d; for (d = -1; d <= (TOTAL_ELEMENTS - 2); d++) printf("%d\n", array[d+1]); return 0; }
迴圈完全不執行,無輸出。
sizeof 回傳 size_t(無號整數)。TOTAL_ELEMENTS 為 7(size_t)。TOTAL_ELEMENTS - 2 為 5(size_t)。d <= (size_t)5 時,d(int)隱式轉換為 size_t。d = -1 轉為無號數變成 UINT_MAX(4294967295),遠大於 5,條件判斷為假,迴圈零次執行。// 方案 1:將迴圈變數改為無號數 for (size_t d = 0; d < TOTAL_ELEMENTS - 1; ++d) // 方案 2:強制轉型比較值 for (int d = -1; d <= (int)(TOTAL_ELEMENTS - 2); ++d) // 方案 3:避免混合比較,改用 < 而非 <= for (int d = 0; d < (int)TOTAL_ELEMENTS - 1; ++d)
「盡量避免有號與無號整數直接比較;迴圈索引優先使用size_t或int但保持一致;邊界條件用<而非<=。」
情境:某人 8 元買入,9 元賣出,10 元買入,11 元賣出。總獲利多少?
面試重點:能否清晰定義「獲利」定義,並說明現金流為準。
模型假設:
結論:
延伸:有風時,傾斜身體可減少正面受雨,此時奔跑確實能減少總雨量。
規則:N 條狗,其中 K 條生病。主人每天觀察其他狗,若確定自己狗生病則當晚槍殺。已知 K > 0 且 K < N。
歸納法解:
關鍵:公共知識(大家都知道大家都知道...)觸發遞歸推理鏈。
20 面體(實為正二十面體?題目存疑),3 種顏色,每面一色,求本質不同染色數。
若為立方體(6 面),波利亞計數定理:
(3^6 + 3*3^4 + 12*3^3 + 8*3^2) / 24 = 57 種。
原題 20 面體需用二十面體旋轉群(60 階)計算,此處不展開。
10 層樓,每層 1 顆鑽石,只能觀察不可回頭,求拿到最大鑽石機率最大化策略。
最優解:前 n/e ≈ 3.68 層(取 3 或 4 層)僅觀察記錄最大值,其後遇到超過該最大值的立即拿取。
機率約 1/e ≈ 36.8%,為理論上限。無法保證 100% 拿到最大。
經典面試題不僅考察知識點,更考察建模能力、邊界思維、溝通表達。將每道題轉化為「模型→假設→推導→驗證→總結」的標準化解題流程,配合持續補充計算機科學基礎(離散數學、概率論、計算機體系結構),方能在面試中游刃有餘。