正文

火星数排序2007-06-17 17:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/26862.html

分享到:

火星数排序

时间限制: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;
}

阅读(2689) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册