问题描述
给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
样例输入
5
101 100 999 1234 110
样例输出
999 27
1234 10
101 2
110 2
100 1
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过10000的非负整数。
#include <stdio.h>
int main() {
int n, k, i, j, t;
scanf("%d", &n);
int a[n], b[n], c[n];
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < n; i++) {
c[i] = a[i];
}
for (i = 0; i < n; i++) {
int sum = 0;
while (a[i] != 0) {
sum += a[i] % 10;
a[i] = a[i] / 10;
}
b[i] = sum;
}
for (i = 1; i < n; i++) {
for (j = 0; j < n - i; j++) {
if (b[j] < b[j + 1] ) {
k = b[j];
b[j] = b[j + 1];
b[j + 1] = k;
t = c[j];
c[j] = c[j + 1];
c[j + 1] = t;
}
if (b[j] == b[j + 1] && c[j + 1] < c[j]) {
k = b[j];
b[j] = b[j + 1];
b[j + 1] = k;
t = c[j];
c[j] = c[j + 1];
c[j + 1] = t;
}
}
}
for (i = 0; i < n; i++) {
printf("%d %d\n", c[i], b[i]);
}
}
首先将输入的数据保存到数组中,然后对数组中每一个数的各位数进行求和,再次保存到一个数组之中,最后把第二个数组中的数据进行冒泡排序,并且对第一个数组同步交换顺序,然后用if条件句满足题目条件,对数据进行交换。