C语言实验——各位数字之和排序
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
给定n个正整数,根据各位数字之和从小到大进行排序。
Input
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。n<=10
Output
输出每组排序的结果。
Example Input
2 1 2
3 121 10 111
0
Example Output
1 2
10 111 121
#include<stdio.h>
#include<math.h>
int weishuhe(int a);
int weishu(int a);
int main()
{
int a,c;
while (scanf("%d", &a) != EOF)
{int k[100], m[100];
if (a == 0)
break;
else
for (int i = 0; i < a; i++)
{
scanf("%d", &m[i]);
k[i] = weishuhe(m[i]);
}
for (int i = 0; i < a; i++)
{
for (int i = 0, t,u; i < a - 1; i++)
{
if (k[i]>k[i + 1])
{
t = k[i];
k[i] = k[i + 1];
k[i + 1] = t;
u = m[i];
m[i] = m[i + 1];
m[i + 1] = u;
}
}
}
for (int i = 0; i < a; i++)
{
if (i == a - 1)
printf("%d\n", m[i]);
else
printf("%d ", m[i]);
}
}
}
int weishu(int a) //判断一个数是几位数
{
int n=0;
while (a)
{
a = a / 10;
n++;
}
return n;
}
int weishuhe(int a)//判断输入数字各个位数的和
{
int sum = 0,b[50];
for (int i = 0; i < weishu(a); i++)
{
b[i] = a / (int)pow(10, i) % 10;
}
for (int i = 0; i < weishu(a); i++)
{
sum = sum + b[i];
}
return sum;
}