数字排序,求解
题目:数字排序问题描述
给定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 weishu(int a) //判断一个数是几位数;
{
int wei=0;
while(a!=0)
{
a=a/10;
wei++;
}
return wei;
}
int sumNum(int a)
{
int sum=0;
int i,k;
k=weishu(a);
for(i=0;i<k;i++)
{
sum+=(a%10);
a=a/10;
}
return sum; //得到了各位数字之和
}
int main(void)
{
int n;
scanf("%d",&n);
int a[1000]={0}; //all 0
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]); //为数组赋值
}
int b[1000]={0};
for(i=0;i<n;i++)
{
b[i]=sumNum(a[i]); //将每个对应的各位数字之和存进b【i】;
}
// for(i=0;i<n;i++)
// {
// printf("%d %d\n",num[i],b[i]); //打印无序的每个数字;
// }
int p,q;
for(p=0;p<n-1;p++)
{
for(q=0;q<n-1-i;q++)
{
if((b[q]==b[q+1])&&(a[q]<a[q+1])) //第一层过滤,如果有各位数字之和相等的特殊情况的话就交换a数组
{
int temp;
temp=a[q]; // b就不换了,毕竟相等
a[q]=a[q+1];
a[q+1]=temp;
}
else if(b[q]<b[q+1])
{
int temp2,temp3;
temp2=a[q],temp3=b[q];
a[q]=a[q+1],b[q]=b[q+1];
a[q+1]=temp2,b[q+1]=temp3;
}
}
}
for(i=0;i<n;i++)
{
printf("%d %d\n",a[i],b[i]);
}
return 0;
}