火星数排序 时间限制:1000MS 内存限制:65536KTotal 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个经过火星由小到大排序的数。 输入样例 4756 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;}

评论