题目描述
给定n个正整数,根据各位数字之和从小到大进行排序。
输入
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。
输出
输出每组排序的结果。
示例输入
2 1 2
3 121 10 111
0
示例输出
1 2
10 111 121
代码如下:
#include<cstdio>
#define N 99999
int main()
{int i,j,n,q[N],p[N],tam,temp,first;
while(scanf("%d",&n)!=EOF&&n!=0)
{first=1;
for(i=0;i<n;i++)
{scanf("%d",&q[i]);}
for(i=0;i<n;i++)
{
tam=q[i];
temp=0;
while (tam)
{ temp+=tam%10;
tam=tam/10;
}
p[i]=temp;
}
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(p[j]>p[j+1])
{temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
tam=q[j];
q[j]=q[j+1];
q[j+1]=tam;
}
for(i=0;i<n;i++)
{
if(first) first=0;
else printf(" ");
printf("%d",q[i]);
}printf("\n");
}
return 0;
}
这是昨天在山东理工OJ上做的题,题目很简单。