首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

尋找所有三位數阿姆斯壯數:遍歷法實作

     編輯:關於C

問題描述

列出所有三位數(100~999)中的阿姆斯壯數。阿姆斯壯數定義:三位數 abc 滿足 a³ + b³ + c³ = abc。

解題策略:暴力遍歷

因為三位數只有 900 個(100~999),直接遍歷每個數並檢查條件是最高效且簡單的方法。時間複雜度 O(900) ≈ O(1),瞬間完成。

演算法流程

  1. 迴圈 i 從 100 到 999
  2. 分解 i 的百位、十位、個位
  3. 計算立方和並比較
  4. 符合條件者輸出

C 語言實作

#include <stdio.h>

int main() {
    int i, a, b, c;
    
    for (i = 100; i <= 999; i++) {
        a = i % 10;        // 個位
        b = i / 10 % 10;   // 十位
        c = i / 100;       // 百位
        
        if (a*a*a + b*b*b + c*c*c == i) {
            printf("%d is Armstrong.\n", i);
        }
    }
    return 0;
}

執行結果

153 is Armstrong.
370 is Armstrong.
371 is Armstrong.
407 is Armstrong.

程式碼解析

  • 位數分解:使用取模(%)與整數除法(/)組合,標準技巧
  • 立方運算:直接用乘法 a*a*a,避免引入 math.h 的 pow() 函數(浮點數精度問題)
  • 輸出格式:每行一個結果,符合題目要求

與上一題(問題七十九)的差異

特性問題七十九問題七十八
輸入單一三位數無輸入
輸出判斷單一數字列出所有符合數字
錯誤處理需檢查輸入範圍無需輸入驗證
適用場景互動式查詢批次列舉

效能考量

900 次迴圈,每次做常數次運算,現代 CPU 微秒級完成。無需優化。若擴展到 n 位數,搜尋空間呈指數增長,需採用回溯或剪枝策略。

常見變體

  • 求 n 位數阿姆斯壯數(n 為輸入參數)
  • 求任意進制下的阿姆斯壯數
  • 計算阿姆斯壯數的個數而非列出具體值

這道題目是迴圈與位數操作的經典練習,也是理解「窮舉法」適用邊界的好例子。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved