求助,相同的一组数据输入进去,为什么第一次可以正常排序,第二次就不可以了
给定n个正整数,根据各位数字之和从小到大进行排序,如果数字之和相同,则按给定正整数从小到大排序。 输入
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。
输出
输出每组排序的结果。
样例输入
2 1 2
3 121 10 111
0
样例输出
1 2
10 111 121
(相同的一组数据输入进去,为什么第一次可以正常排序,第二次就不可以了)
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int ex(int a[],int s[],int n);
int n,i,j;
int s[100]={0},a[100];//s中是各个数字的各个位数的和,a中是原本输入的数
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
for(j=a[i];j;j/=10)
{
s[i]+=j%10;
}
}
ex(a,s,n);
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\12",a[i]);
}
return 0;
}
int ex(int a[],int s[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(s[j]>s[j+1])
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
else if(s[j]==s[j+1] && a[j]>a[j+1])
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}