1141: 【作】【基础】数的排序
内存限制:16 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:17
解决:10
题目描述
输入n个不超过30000的整数(n≤10)。然后求出每个数的数字和,再按每个数的数字和由小到大排列输出。
输入
第一行为整数n
第二行为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;
}