剔除相关数

来源:互联网 发布:linux下启动oracle11g 编辑:程序博客网 时间:2024/04/20 03:10

题目描述

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

输入

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

输出

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

样例输入

8213 667 3 213 43 34 677 23322 232 2320

样例输出

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

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]);   }     } } }

1 0
原创粉丝点击