藍橋杯代碼填空題通常考察基礎算法與 C/C++ 語言細節。本文梳理六個典型模塊:身份證校驗、神秘三位數、生日悖論、四方定理、因數分解、組合數遞歸。
原理:前 17 位數字分別乘以固定權重 {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2} 求和,對 11 取模,按表映射為校驗碼 {1,0,X,9,8,7,6,5,4,3,2}。
填空:`s[i] - '0'` 和 `sum % 11`。注意字符轉數字需減 '0'。
題目:找三位數 abc,使得 a! + b! + c! = abc。
解法:預計算 0!~9!,逐位拆解數字(`x > 0` 循環取模 10 除 10),累加階乘比較。
填空:`x > 0`。
現象:30 人中至少兩人同一天生日概率約 70%。
代碼邏輯:雙重循環檢查是否有重複生日,若 `tag` 為真需跳出外層循環。
填空:`if(tag) break;` 否則內層 break 只能跳出內層,導致重複計數。
定理:任意自然數可表示為四個整數平方和。
遞歸函數 `f(n, a[], idx)`:若 `n == 0` 成功;若 `idx == 4` 失敗;從 `sqrt(n)` 遞減嘗試 i,遞歸 `f(n - i*i, a, idx+1)`。
填空:`n == 0` 和 `f(n - i*i, a, idx+1) == 1`。
任務:分解 n (n>1),如 60 → 2 2 3 5。
技巧:外層 for 遍歷因子 i,內層用 `while(n % i == 0)` 連續除盡,避免 i-- 折騰。
填空:`while(n % i == 0)`。
遞歸公式:C(n,m) = C(n-1,m-1) + C(n-1,m)。
邊界:m==0 返回 1;m>n 返回 0。
填空:`return 1` 和 `f(n-1,m)`。
這六道題涵蓋字符處理、數論、概率模擬、遞歸回溯、因數分解、組合數學,是藍橋杯填空題的縮影。掌握核心模板,靈活應變,方能游刃有餘。