码迷,mamicode.com
首页 > 编程语言 > 详细

C语言实现火星数排序

时间:2020-03-26 01:30:41      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:结构   int   赋值   scanf   for   can   开头   c语言实现   sam   

题目描述

哈哈,大家对地球上的排序规则都比较清楚了吧!可是火星上的规则跟地球上的不一样。地球上的十个数字的顺序是{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

首先找到火星数字对应的映射关系即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);
}

 

 

C语言实现火星数排序

标签:结构   int   赋值   scanf   for   can   开头   c语言实现   sam   

原文地址:https://www.cnblogs.com/cocobear9/p/12571804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!