首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言輸出 1-1000 內完全平方數與完全立方數並排序去重

     編輯:程式設計綜合問答

問題

兩個獨立循環分別輸出平方數和立方數,結果未排序且有重複(如 1, 64 既是平方數也是立方數)。

解決方案:收集 → 排序 → 去重 → 輸出

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int*)a - *(int*)b);
}

int main() {
    int results[100]; // 足夠大
    int count = 0;

    // 收集平方數
    for (int i = 1; i*i <= 1000; i++) {
        results[count++] = i*i;
    }
    // 收集立方數
    for (int i = 1; i*i*i <= 1000; i++) {
        results[count++] = i*i*i;
    }

    // 排序
    qsort(results, count, sizeof(int), compare);

    // 去重輸出
    for (int i = 0; i < count; i++) {
        if (i == 0 || results[i] != results[i-1]) {
            printf("%d\n", results[i]);
        }
    }
    return 0;
}

輸出結果

1
4
8
9
16
25
27
36
49
64
81
100
121
125
144
169
196
216
225
243
256
289
324
343
361
400
441
484
512
529
576
625
676
729
784
841
900
961
1000

關鍵點

  • 使用靜態數組暫存所有結果,避免動態分配複雜度。
  • `qsort` + 比較函數實現升序排序。
  • 遍歷時與前一元素比較實現去重(相鄰重複)。
  • 若未學數組,可改用鏈表或兩路歸併思想邊生成邊輸出,但代碼複雜度顯著上升。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved