C++某题(函数体+排序问题)
题目描述
输入n个不超过30000的整数(n≤10)。然后求出每个数的数字和,再按每个数的数字和由小到大排列输出。
输入格式
第一行为整数n
第二行为n个整数
输出格式
由小到大排列的每个数的数字和(每个数之间保留一个空格)
样例输入
4
33 104 87 16
样例输出
5 6 7 15
#include<bits/stdc++.h>
using namespace std;
int jsszh(int a)//计算数字和
{
if(a<10)
{
return a;
}
if(10<a&&a<100)
{
return a%10+a/10;
}
if(100<a&&a<1000)
{
int b,c,d;
b=a/100;
c=(a-100*b)/10;
d=a-b*100-c*10;
return b+c+d;
}
if(1000<a&&a<10000)
{
int b,c,d,e;
b=a/1000;
c=(a-1000*b)/100;
d=(a-b*1000-c*100)/10;
e=a-b*1000-c*100-d*10;
return b+c+d+e;
}
if(10000<a&&a<30001)
{
int b,c,d,e,f;
b=a/10000;
c=(a-10000*b)/1000;
d=(a-b*10000-c*1000)/100;
e=(a-b*10000-c*1000-d*100)/10;
f=a-b*10000-c*1000-d*100-e*10;
return b+c+d+e+f;
}
}
int main()
{
int n,a[15],b[15];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
b[i]=jsszh(a[i]);
}
for(int i=1;i<=n;i++)
{
int tmp=0;
for(int j=1;j<=i;j++)
{
if(b[i]<b[j])
{
tmp=b[j];
b[j]=b[i];
b[i]=tmp;
}
}
}
for(int i=1;i<=n;i++)
{
cout<<b[i]<<' ';
}
}

