[1188]C语言实验——各位数字之和排序 sdutOJ

来源:互联网 发布:阿里炒股软件 编辑:程序博客网 时间:2024/05/22 04:57


C语言实验——各位数字之和排序

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给定n个正整数,根据各位数字之和从小到大进行排序。

输入

输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。

输出

输出每组排序的结果。

示例输入

2 1 23 121 10 1110

示例输出

1 210 111 121
 

#include <stdio.h>int main(){    int n,i,j,q,t;    while(scanf("%d",&n),n)    {        int a[n];        int sum[n];        for(i=0; i<n; i++)        {            scanf("%d",&a[i]);            sum[i]=a[i];        }        for(i=0; i<n; i++)        {            q=sum[i];            sum[i]=0;            while(q/10!=0)            {                sum[i]+=q%10;                q/=10;            }            if(q/10==0)                sum[i]+=q;        }        for(i=0; i<n-1; i++)            for(j=0; j<n-i-1; j++)             {                  if(sum[j]>sum[j+1])                {                    t=sum[j];                    sum[j]=sum[j+1];                    sum[j+1]=t;                    t=a[j];                    a[j]=a[j+1];                    a[j+1]=t;                }                else if(sum[j]==sum[j+1])                {                    if(a[j]>a[j+1])                    {                        t=a[j];                        a[j]=a[j+1];                        a[j+1]=t;                    }                }             }        for(i=0; i<n; i++)        {            if(i!=n-1)                printf("%d ",a[i]);            else                printf("%d\n",a[i]);        }    }    return 0;}

0 0