Problem Description
给定n个正整数,根据各位数字之和从小到大进行排序。
Input
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。n<=10
Output
输出每组排序的结果。
Sample Input
2 1 2
3 121 10 111
0
Sample Output
1 2
10 111 121
#include <stdio.h>
int sum(int n);
void order(int a[],int n);
int main()
{
int n;
int a[10];
scanf("%d",&n);
while(n!=0)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
order(a,n);
for(int i=0;i<n;i++)
{
if(i==0)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
printf("\n");
scanf("%d",&n);
}
return 0;
}
int sum(int n) //计算各位数字之和
{
int sum=0;
while(n>0)
{
sum=sum+n%10;
n/=10;
}
return sum;
}
void order(int a[],int n) //选择法排序
{
int t,min;
for(int i=0;i<n-1;i++)
{
min=i;
for(int j=i+1;j<n;j++)
if(sum(a[j])<sum(a[min]))
min=j;
t=a[i];
a[i]=a[min];
a[min]=t;
}
}