您的位置:首页 > 理论基础 > 数据结构算法

数字之和排序,数据结构

2016-07-26 21:32 316 查看
 

 


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



Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

输出每组排序的结果。

示例输入

2 1 2
3 121 10 111
0


示例输出

1 2
10 111 121


提示

 

 

 

 

 

#include <stdio.h>

#include <stdlib.h>

#define max 10200

typedef struct

{

    int *a;

    int *b;

    int len;

    int list;

}sq;

void init(sq &l)

{

    l.a=(int *)malloc(max*sizeof(int));

    l.b=(int *)malloc(max*sizeof(int));

    l.len=0;

    l.list=max;

}

int jia(int n)

{

    int m,sum=0;

    while(n)

    {

        m=n%10;

        n=n/10;

        sum=sum+m;

    }

    return sum;

}

void creat(sq &l,int n)

{

    int i;

    for(i=0;i<n;i++)

    {

        scanf("%d",&l.a[i]);

        l.b[i]=jia(l.a[i]);

    }

    l.len=n;

}

void compare(sq &l)

{

    int i,j,t;

    for(i=0;i<l.len-1;i++)

    {

        for(j=0;j<l.len-i-1;j++)

        {

            if(l.b[j]>l.b[j+1])

            {

                t=l.a[j];

                l.a[j]=l.a[j+1];

                l.a[j+1]=t;

                t=l.b[j];

                l.b[j]=l.b[j+1];

                l.b[j+1]=t;

            }

        }

    }

}

void dis(sq &l)

{

    int i=0;

    for(i=0;i<l.len;i++)

      {

          if(i==0) printf("%d",l.a[i]);

          else printf(" %d",l.a[i]);

      }

    printf("\n");

}

int main()

{

    int n;

    while(~scanf("%d",&n))

    {

        if(n==0) break;

        sq l;

        init(l);

        creat(l,n);

        compare(l);

        dis(l);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: