C语言实验——各位数字之和排序
题目描述
给定n个正整数,根据各位数字之和从小到大进行排序。
输入
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。
输出
输出每组排序的结果。
示例输入
2 1 2 3 121 10 111 0
示例输出
1 2 10 111 121
注意题目为各位数字之和,不注意是会吃大亏的。。。
#include <stdio.h> void sort(int a[],int n);//冒泡排序 int isum(int n);//各位之和 int main() { int n,i; int a[100]; while(scanf("%d",&n), n) { for(i=0; i<n; i++)//输入数组 scanf("%d",&a[i]); sort(a,n);//排序 for(i=0; i<n; i++)//输出 { if(i != n-1) printf("%d ",a[i]); else printf("%d\n",a[i]); } } return 0; } void sort(int a[],int n)//冒泡排序 { int i,j; int t; for(i=n-1-1; i >=0; i--) { for(j=0; j<=i; j++) { if(isum(a[j]) > isum(a[j+1])) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } int isum(int n)//各位之和 { int s=0; do { s += n % 10; n /= 10; }while(n); return s; }