题目6:数字排序
问题描述
给定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 sum(int number)
{
int sum=0;
while(number!=0)
{
sum=sum+number%10;
number=number/10;
}
return sum;
}
int main() {
int n;
scanf("%d",&n);
int i,origin[1001];
for(i=0;i<n;i++)
{
scanf("%d",&origin[i]);
}
struct num{
int number;
int sum;
}M[n],temp;
int r;
for(i=0;i<n;i++)
{
M[i].number=origin[i];
M[i].sum=sum(origin[i]);
}
for(i=0;i<n;i++)
{
for(r=0;r<n-i-1;r++)
{
if(M[r].sum<M[r+1].sum)
{
temp=M[r];
M[r]=M[r+1];
M[r+1]=temp;
}
if(M[r].sum==M[r+1].sum)
{
if(M[r].number>M[r+1].number)
{
temp=M[r];
M[r]=M[r+1];
M[r+1]=temp;
}
}
}
}
for(i=0;i<n;i++)
{
printf("%d %d\n",M[i].number,M[i].sum);
}
return 0;
}