我们有 NN 个正整数,均小于 1000010000。现在需要将这些正整数按照该正整数每一位数字相加的和从小到大排序,即该正整数的每一位数字相加的和越小排位越靠前。如果各位相加和相等,则按照正整数的值从小到大排序。
输入格式
输入有 22 行
- 第一行为一个整数 NN,0 < N < 1010<N<101;
- 第二行为用空格隔开的 NN 个正整数,均小于 1000010000。
输出格式
输出有 11 行,为按照题目要求排序后的 NN 个正整数,用空格隔开。
格式说明
输出时每行末尾的多余空格,不影响答案正确性
样例输入
4
20 12 1 11
样例输出
1 11 20 12
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n,a[101];
int sum(int x){
int s=0;
while(x>0){
s+=x%10;
x/=10;
}
return s;
}
bool cmp(int x,int y){
int sx=sum(x),sy=sum(y);
if(sx!=sy){
return sx<sy;
}
return x<y;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}