题目描述
将每组整数按各位数字和的大小进行排序输出。数字和排序是指,如果两个整数的数字和不相等,则数字和大者排在前,若数字和相等,则整数值大者排在前。
输入
输入一些整数组,第一个数N表示该数组有N个数,随后输入N个整数(0<N<=999)。若N为0,则程序运行结束。
输出
按所给的比较方法从大到小的顺序输出N个整数,每个数之间用一个空格隔开,行末无空格。
样例输入
5 35 27 88 61 23 8 11 45 54 31 24 76 999 1000 0
样例输出
88 27 35 61 23 999 76 54 45 24 31 11 1000
#include<stdio.h>
#include<algorithm>
using namespace std;
struct num{
int x,y;
}a[1005];
int he(int x)
{ int s=0;
while(x!=0)
{
s=s+x%10;
x=x/10;
}
return s;
}
int cmp(num x,num y)
{
if(x.y!=y.y) return y.y<x.y;
if(x.x!=y.x) return y.x<x.x;
}
int main()
{
int n,i;
while(1)
{
scanf("%d",&n);
if(n==0) break;
for(i=0;i<n;i++)
{
scanf("%d",&a[i].x);
a[i].y=he(a[i].x);
}
sort(a,a+n,cmp);
for(i=0;i<n;i++)
printf("%d ",a[i].x);
printf("\n");
}
}