问题描述
给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
样例输入
5
101 100 999 1234 110
样例输出
999 27
1234 10
101 2
110 2
100 1
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过10000的非负整数。
#include<iostream>
#include<stdio.h>
using namespace std;
void swap(int &a, int &b){
int t;
t = a;
a = b;
b = t;
}
int sum(int a){
int summ = 0;
while(a != 0){
summ = summ + a%10;
a = a/10;
}
return summ;
}
main(){
int n, flag=1;
cin>>n;
int a[n][2];
for(int i=0; i<n; i++){
cin>>a[i][0];
}
for(int i=0; i<n; i++){
a[i][1] = sum(a[i][0]);
}
for(int i=0; i<n-1&&flag == 1; i++){
flag = 0;
for(int j=n-1; j>i; j--){
if(a[j-1][1]<a[j][1] || (a[j-1][1]==a[j][1] && a[j-1][0]>a[j][0])){
swap(a[j][0], a[j-1][0]);
swap(a[j][1], a[j-1][1]);
flag = 1;
}
}
}
for(int i=0; i<n; i++){
cout<<a[i][0]<<" "<<a[i][1]<<endl;
}
}