C语言实现火星数排序
题目描述
输入
输出
样例输入
2 3 4 88 12 3 98 46
样例输出
2 3 4 21 12 756 98 46首先找到火星数字对应的映射关系即int b[]数组,创建结构体,每次进while和for用memeset()清空结构体数组,每次赋值结构体数组里面的火星数字,和对应的地球数字,然后对结构体进行排序
#include <stdio.h>
#include <string.h>
struct map
{
    int earth ;
    int mars ;
}MAP[100];// //火星与地球数字对应关系的结构体
 void transform(struct map * p,int *b,int *c,int i);
int main()
{
    int b[10]={0,2,4,5,7,3,9,8,1,6}; //映射关系
    int c[10],t,n,i,j;
    struct map temp ;
    scanf("%d",&t);
    while(t--)
    {
        memset(MAP,0,sizeof(MAP));
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            memset(c,0,sizeof(c));
            scanf("%d",&MAP[i].mars);
            transform(&MAP[i],b,c,i);
        }
        for(i=0;i<n-1;i++)
        {
            for(j=0;j<n-i-1;j++)
            {
                if(MAP[j].earth>MAP[j+1].earth)
                {
                    temp =MAP[j]   ;
                    MAP[j]=MAP[j+1];
                    MAP[j+1]=temp;
                }
            }
        }
        for(i=0;i<n;i++)
        {
            printf("%d ",MAP[i].mars);
        }
        printf("\n");
    }
}
void transform(struct map * p,int *b,int *c,int i)////将火星数字转化为对应的地球数字
{
    int ii=0,j,n,r ;
    n= p->mars;
    r=n;
    while(n)
    {
        c[ii++]=n%10;
        n/=10;
    }
    for(j=ii-1;j>=0;j--)
    {
        p->earth=p->earth*10+b[c[j]];
    }
   // printf("火星数%d对应的地球数是:%d\n",r,p->earth);
}
