正文

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

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

分享到:

火星数排序 时间限制: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;}

阅读(2797) | 评论(0)


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

评论

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