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

數位和排序:按各位數字之和對正整數數組排序的C語言實現

     編輯:關於C語言

問題描述

輸入多組數據,每組第一個數 n (1≤n≤20) 後跟 n 個正整數。按各位數字之和升序排序,輸出排序結果。n=0 結束輸入。

核心函數:計算數位和


int get_digit_sum(int num) {
    int sum = 0;
    while (num) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

排序策略

使用簡單選擇排序(或冒泡),比較時調用 get_digit_sum()。因 n≤20,O(n²) 完全足夠。若數位和相等,題目未規定穩定性,保持原序或任意序均可。

代碼實現

#include <stdio.h>

int get_digit_sum(int num);

int main() {
    int i, j, n, a[21], temp;

    while (1) {
        scanf("%d", &n);
        if (n == 0) break;

        for (i = 0; i < n; i++) scanf("%d", &a[i]);

        for (i = 0; i < n-1; i++) {
            for (j = i+1; j < n; j++) {
                if (get_digit_sum(a[i]) > get_digit_sum(a[j])) {
                    temp = a[i]; a[i] = a[j]; a[j] = temp;
                }
            }
        }

        for (i = 0; i < n; i++) {
            printf("%d", a[i]);
            if (i < n-1) printf(" ");
        }
        printf("\n");
    }
    return 0;
}

int get_digit_sum(int num) {
    int sum = 0;
    while (num) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

測試樣例

輸入:

2 1 2
3 121 10 111
0

輸出:

1 2
10 111 121

解析:121數位和=4,10數位和=1,111數位和=3 → 排序後 10, 111, 121。

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