火星数排序
时间限制:1000MS 内存限制:65536K
Total Submit:27 Accepted:7
问题描述
哈哈,大家对地球上的排序规则都比较清楚了吧!可是火星上的规则跟地球上的不一样。地球上的十个数字的顺序是{0,1,2,3,4,5,6,7,8,9},火星上的却是{0,8,1,5,2,3,9,4,7,6}。好在火星上基本数字也是十个,也是十进制,因此,很容易推得9<80<88<81<… 请根据火星上的规则对火星数进行从小到大的排序。
输入
第一行为N,表明接下来有N个火星数,每个火星数用空格隔开(不超过5位)。
输出
输出占一行,为N个经过火星由小到大排序的数。
输入样例
4
756 12 3 87
输出样例
3 87 12 756
// my code
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int meter[]={0,8,1,5,2,3,9,4,7,6};
int myChange(int d,int flag){
int k;
if(flag){
for(k=0; k < 10; k++)
if(d == meter[k]){
d = k;
return d;
}
}
return meter[d];
}
void Change(int *a,int flag){
int i,j,d,dest;
for(dest=0,i=1,j=(*a); j; ){
d = j%10;
j /= 10;
d = myChange(d,flag);
dest += (d*i);
i *= 10;
}
*a = dest;
}
int myCmp(const int *a,const int *b){
if(*a > *b)
return 1;
else if(*a < *b)
return -1;
return 0;
}
int main(){
int i,n,*p;
scanf("%d",&n);
p = (int*)malloc(sizeof(int)*n);
for(i=0; i<n; i++){
scanf("%d",p+i);
Change(p+i,1);
}
qsort(p,n,sizeof(int),myCmp);
for(i=0; i<n; i++){
Change(p+i,0);
printf("%d ",*(p+i));
}
return 0;
}
评论