求大神解答一下C语言问题?

题目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 main()
{
int n,i,j,t,m,x,y;
int a[1000];
int b[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
for(j=a[i],b[i]=0;j!=0;j=j/10)
{
b[i]+=j%10;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(b[j+1]>b[j])
{
t=b[j];
m=a[j];
b[j]=b[j+1];
a[j]=a[j+1];
b[j+1]=t;
a[j+1]=m;
}
}
}
for(i=0;i<n;i++){
if(b[i]==b[i+1]&&a[i+1]<a[i])
{
x=b[i];
y=a[i];
b[i]=b[i+1];
a[i]=a[i+1];
b[i+1]=x;
a[i+1]=y;
}
}
for(i=0;i<n;i++)
printf("%d %d\n",a[i],b[i]);
return 0;
}

原来的程序没有问题啊!

不过程序可以简化的:

#include<stdio.h>

int main()

{ int n,i,j,t,m,a[1000],b[1000]={0};

  scanf("%d",&n);

  for(i=0; i<n; i++)

  { scanf("%d",&a[i]);

    for(j=a[i]; j!=0; j/=10)

    { b[i]+=j%10;

    }

  }

  for(i=0; i<n-1; i++)

  { for(j=0; j<n-i-1; j++)

    { if(b[j+1]>b[j]||b[j]==b[j+1]&&a[j+1]<a[j])

      { t=b[j];

        m=a[j];

        b[j]=b[j+1];

        a[j]=a[j+1];

        b[j+1]=t;

        a[j+1]=m;

      }

    }

  }

   for(i=0; i<n; i++)

    printf("%d %d\n",a[i],b[i]);

  return 0;

}

温馨提示:答案为网友推荐,仅供参考