1141: 【作】【基础】数的排序

内存限制:16 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:17 解决:10

题目描述

输入n个不超过30000的整数(n≤10)。然后求出每个数的数字和,再按每个数的数字和由小到大排列输出。

输入

第一行为整数n 
第二行为n个整数

输出

由小到大排列的每个数的数字和(每个数之间保留一个空格)

样例输入 复制

4
33 104 87 16

样例输出 复制

5 6 7 15

提示

#include <iostream>

using namespace std;
int main() {
    /*
    思路:读入数组元素,求出每个数的各个位的和然后对各个位的和进行排序
    */
    int n, a[20], i, j, t, s;
    cin >> n;
    for (i = 0; i < n; i++) {
        cin >> a[i];
        //求出 a[i]的各个位的和,替换a[i]的值
        s = 0;
            while (a[i] != 0) {
                //得到个位,将个位加到总和
                s = s + a[i] % 10;
                //去除个位
                a[i] = a[i] / 10;
            }
        //用求出的和替换原来的值
        a[i] = s;
    }
    //排序:n个数排序n-1轮
    //i代表排序的轮数
    for (i = 1; i <= n - 1; i++) {
        //第i轮从下标为0的元素循环到下标为n-i-1的元素
        for (j = 0; j <= n - i - 1; j++) {
            //如果当前数>后面的元素,交换
            if (a[j] > a[j + 1]) {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    //输出排序的结果
    for (i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    return 0;
}