题目描述
一个数与另一个数如果含有相同数字和个数的字符,则称两数相关。现有一堆乱七八糟的整数,里面可能充满了彼此相关的数,请你用一下手段,自动地将其剔除。
输入
多实例测试。每组数据包含一个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]); } } } }