正文

剔除相关数2007-06-22 19:08:00

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

分享到:

剔除相关数 时间限制:1000MS  内存限制:65536KTotal Submit:1 Accepted:1 问题描述 一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。 输入 每组数据前有一个N(<1000),表示跟随的整数P(0<P<2^32)个数,若N为0,表示结束。 输出 按从小到大的顺序输出非相关数,若没有非相关数,则输出None。 输入样例 8213 667 3 213 43 34 677 23322 232 2320 输出样例 2 3 667 677None // my code #include<stdio.h>#include<stdlib.h>#include<string.h> struct Node{ int s; int c;}a[1002];void deal(struct Node *a){ char meter[10] = {0},str[12]; int  i,k; if(a->s==0){  a->c=0;  return; } for(i=a->s; i!=0; i/=10)  meter[i%10]++; if(meter[0]){  for(i=1; i<10; i++){   if(meter[i])    break;  }  str[0]=i+'0';  for(k=1; meter[0]; meter[0]--,k++)   str[k] = '0';  for(meter[i]--; meter[i]; meter[i]--,k++)   str[k] = i+'0';  i++; } else  i = k = 0; for(; i<10; i++)  for(; meter[i]; meter[i]--,k++)   str[k] = i+'0';  str[k]='\0';  a->c = atoi(str);}int myCmp(const struct Node *a,const struct Node *b){ if(a->c > b->c)  return 1; else if(a->c < b->c)  return -1; return 0;}int myCmpInt(const int *a,const int *b){ if(*a > *b)  return 1; else if(*a < *b)  return -1; return 0;}int main(){ int  i,j,n,k,flag,d[1002]; while(1){  scanf("%d",&n);  if(n==0)   break;  for(i=0; i < n; i++){   scanf("%d",&a[i].s);   deal(&a[i]);  }  qsort(a,n,sizeof(struct Node),myCmp);  for(j=k=flag=0,i=1; i < n; i++){   if(a[j].c!=a[i].c && flag){    j=i;    flag=0;   }   else if(a[j].c!=a[i].c && !flag){    d[k++]=a[j].s;    j = i;   }   else    flag = 1;  }  if(k==0){   printf("None\n");   continue;  }  if(a[n-2].c != a[n-1].c)   d[k++] = a[n-1].s;  qsort(d,k,sizeof(int),myCmpInt);  for(i=0; i < k; i++)   printf("%d ",d[i]);  printf("\n"); }  return 0;}

阅读(3307) | 评论(0)


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

评论

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