现在给定了n个正整数,直接排序的话实在太乏味,将每个正整数的每一位相加,然后根据每一位的和对所有的数按从小到大进行排序。注意,如果有多个数的位加和结果相同的话,那么按数本身的大小排序。比如有5个数:21 12 10 47 50,5个数的位相加结果分别为:3 3 1 11 5, 因此排序结果为:10 12 21 50 47
供参考:
#include<stdio.h>
#define N 5
int s(int n)
{
int s=0;
while(n){
s += n%10;
n /= 10;
}
return s;
}
void swap(int *a,int *b)
{
int tmp;
tmp = *a;*a = *b;*b = tmp;
}
int main()
{
int a[N]={21,12,10,47,50},i,j;
for(i=0;i<N-1;i++){
for(j=0;j<N-i-1;j++)
if(s(a[j])> s(a[j+1])){
swap(&a[j],&a[j+1]);
}else if(s(a[j]) == s(a[j+1])){
if(a[j] > a[j+1]){
swap(&a[j],&a[j+1]);
}
}
}
for(i=0;i<N;i++)
printf("%4d",a[i]);
return 0;
}