C-火星数排序

题目描述

哈哈,大家对地球上的排序规则都比较清楚了吧!可是火星上的规则跟地球上的不一样。地球上的十个数字的顺序是{0,1,2,3,4,5,6,7,8,9},火星上的却是{0,8,1,5,2,3,9,4,7,6}。好在火星上基本数字也是十个,也是十进制,因此,很容易推得9<80<88<81<… 请根据火星上的规则对火星数进行从小到大的排序。

输入

第一行为Case,表明接下来有Case组输入数据,每组数据的开头为N,表明该行接下来有N个数,然后是N个火星数中间以一个空格隔开

输出

每组输出只占一行,为N个经过火星排序的数

样例输入

4
4 1 2 3 4
2 21 88
3 756 12 3
3 1 98 46

样例输出

1 2 3 4
88 21
3 12 756
1 98 46
#include <stdio.h>
#include <math.h>
#include <string.h>
const char shu[10]={'0','8','1','5','2','3','9','4','7','6'};用数组小标代表真值
typedef struct{
    char num[10];
    int real;//真值
}data;
int main()
{
    int n,N,i,j,k,l;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        data a[1000]={0},temp1;
        scanf("%d",&N);
        for(j=0;j<N;j++)
        {
            scanf("%s",&a[j].num);
            for(k=strlen(a[j].num),l=0;k>0;k--,l++)//将字符数字转换为整型真值数字
            {
                for(int z=0;z<10;z++)
                {
                    if(a[j].num[l]==shu[z])
                    {
                        a[j].real=a[j].real+z*pow(10,k-1);
                        break;
                    }
                }
            }
        }
        for(j=0;j<N-1;j++)//根据真值冒泡排序
        {
            for(k=0;k<N-1;k++)
            {
                if(a[k].real>a[k+1].real)
                {
                    temp1=a[k];
                    a[k]=a[k+1];
                    a[k+1]=temp1;
                }
            }
        }
        for(j=0;j<N;j++)
        {
            printf("%s ",a[j].num);
        }
        printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值