兩道經典 C 語言基礎練習:累加數列求和(a + aa + aaa + aaaa + aaaaa)與 1-100 中數字 9 出現次數統計。通過簡單循環與數學技巧高效求解,適合初學者鞏固循環、取模、整除運算。
例 1:累加數列求和
題目
輸入數字 a(0-9)和項數 n,求 Sn = a + aa + aaa + ... (n項)。
例:a=2, n=5 → 2 + 22 + 222 + 2222 + 22222。
代碼
#include
int main() {
int a, n;
scanf("%d %d", &a, &n);
int sum = 0;
int term = 0;
for (int i = 0; i < n; ++i) {
term = term * 10 + a; // 遞推生成當前項:2 → 22 → 222...
sum += term;
}
printf("%d\n", sum);
return 0;
}
遞推邏輯
| i | term 計算 | term 值 | sum 累加 |
| 0 | 0*10+2 | 2 | 2 |
| 1 | 2*10+2 | 22 | 24 |
| 2 | 22*10+2 | 222 | 246 |
| 3 | 222*10+2 | 2222 | 2468 |
| 4 | 2222*10+2 | 22222 | 24690 |
輸入 2 5 輸出 24690。
例 2:1-100 中 9 的個數
題目
統計 1 到 100(含)中,數字 9 在十位和個位共出現多少次。
代碼
#include
int main() {
int count = 0;
for (int i = 1; i <= 100; ++i) {
if (i % 10 == 9) // 個位是 9
++count;
if (i / 10 == 9) // 十位是 9
++count;
}
printf("%d\n", count);
return 0;
}
邏輯解析
i % 10 == 9:個位為 9 的數:9, 19, 29, ..., 99 → 10 個。
i / 10 == 9:十位為 9 的數:90, 91, ..., 99 → 10 個。
- 99 同時滿足兩條件,被計數兩次,正確(99 有兩個 9)。
- 總計 20 次。
運行結果
20
擴展思考
- 通用化統計函數:
int countDigit(int start, int end, int digit) {
int count = 0;
for (int i = start; i <= end; ++i) {
int x = i;
while (x > 0) {
if (x % 10 == digit) ++count;
x /= 10;
}
}
return count;
}
- 數學公式優化:1-100 中 9 的個數 = 10(個位)+ 10(十位)= 20,O(1) 計算。
- 邊界處理:0 包含 0 個 9;負數取絕對值統計。
總結
兩例展示了 C 語言處理數字規律問題的核心技巧:
- 遞推構造項:
term = term * 10 + digit。
- 取模/整除拆解位:
%10 取個位,/10 右移一位。
- 循環邊界精確:
i <= 100 含邊界,i < n 滿 n 項。
掌握這兩套模板,可輕鬆應對「數字統計、數列求和、位運算」類基礎算法題。
- 上一篇文章: C語言進程間通信概述:三大核心問題與同步互斥基礎
- 下一篇文章: 經典算法題:猴子吃桃問題的數學建模與 C 語言實現
Copyright ©
程式碼之家 All Rights Reserved