剔除相关数

题目描述

一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。

输入

多实例测试。每组数据包含一个n(n<1000),和n个int范围内的正整数。若n为0,表示结束。

输出

按从小到大的顺序输出非相关数,若没有非相关数,则输出None。

样例输入

8
213 667 3 213 43 34 677 2
3
322 232 232
0

样例输出

2 3 667 677
None
思路:先找到一组数据中“相同”的数字,存到另一个数组中,然后让另一个数组和输入的数组进行比较,相同就删除(后面往前面覆盖)
 
 

import java.util.*;

public class Main {  public static  void sort_change(int []arr,int num){   int temp;   for(int i=0;i<num-1;i++){    for(int j = i+1;j<num;j++){     if(arr[i]>arr[j]){      temp = arr[i];      arr[i] = arr[j];      arr[j] = temp;     }    }   }  }  public static int cmp(int a,int b){   int []fj_a = new int[10];   int []fj_b = new int[10];   int i = 0, j = 0,flag = 0;   while(a>0){    fj_a[i] = a%10;    a = a/10;    i++;   }   while(b>0){    fj_b[j] = b%10;    b = b/10;    j++;   }      sort_change(fj_a,i);   sort_change(fj_b,j);   if(i!=j){    flag = 0;   }else{    for(int t = 0;t<i;t++){     if(fj_a[t] == fj_b[t]){      flag = 1;     }else{      flag = 0;      break;     }    }   }   if(flag == 0){    return 0;   }else{    return 1;   }      }  public static void main(String[] args) {   Scanner sc = new Scanner(System.in);   while(true){    int num = sc.nextInt();    if(num == 0)break;    int len = 0,len1 = 0;    int []res = new int[50000];    int []jg = new int[50000];    int []jg1 = new int[50000];    for(int j = 0;j<num;j++){     res[j] = sc.nextInt();    }    sort_change(res, num);    for(int i = 0;i<num-1;i++){     for(int j=i+1;j<num;j++){      if(cmp(res[i], res[j]) == 1){       jg[len] = res[i];       len++;       break;      }     }    }    for(int i = 0;i<num;i++){     int flag1 = 0;     for(int j = 0;j<len;j++){      if(cmp(jg[j],res[i]) == 1){       flag1 = 1;      }     }     if(flag1 == 0){      jg1[len1] = res[i];      len1++;     }    }    if(len1 == 0){     System.out.println("None");    }else{     for(int i = 0;i<len1-1;i++){      System.out.print(jg1[i]+" ");     }     System.out.println(jg1[len1-1]);    }       }  }   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值