http://acm.sdut.edu.cn/judgeonline/showproblem?problem_id=1188
#include<iostream>
using namespace std;
int main()
{
int n,sum,a[100],sm[100],i,j,k,t;
while(cin>>n)
{
if(n==0) break;
for(i=1;i<=n;i++)
{
cin>>a[i];
sum=0;
sm[i]=a[i];
while(sm[i]) //求和
{
sum=sum+sm[i]%10;
sm[i]=sm[i]/10;
} //a[i]对应数各位数字求和;
sm[i]=sum; //和赋给sm【i】
}
for(i=1;i<=n;i++) //和排序
{
k=i;
for(j=i+1;j<=n;j++)
if(sm[j]<sm[k])
k=j;
if(k!=i)
{
t=a[i];a[i]=a[k];a[k]=t;
t=sm[i];sm[i]=sm[k];sm[k]=t; //当数a【i】的位置变化时,对应和sm【i】也应变化
}
}
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}