top1编程
← 返回题目
题解

【基础】数的排序

1 条题解

  • 0
    @ 2026-7-30 1:34:12

    解题思路

    先求出每个数的数字和,再把这些数字和从小到大排序。

    参考代码

    // 先读入题目给出的数据。
    // 再按照题目要求进行计算。
    // 最后按规定格式输出答案。
    #include <iostream>
    using namespace std;
    int main() {
        int n, a[10], s[10];
        cin >> n;
        // 先读入每个数,并计算它的各位数字和。
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            int x = a[i];
            s[i] = 0;
            // 不断取出个位数字,就能得到数字和。
            while (x > 0) { s[i] += x % 10; x /= 10; }
        }
        // 用简单的交换排序,把数字和从小到大排列。
        for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (s[i] > s[j]) { int t = s[i]; s[i] = s[j]; s[j] = t; }
        for (int i = 0; i < n; i++) { if (i) cout << ' '; cout << s[i]; }
        return 0;
    }
    

    复杂度分析

    排序需要 O(n^2) 时间;其余循环按照实际遍历次数计算。代码使用固定大小数组,额外空间复杂度为 O(1) 或 O(n)。

    • 1