1081: 剔除相关数

来源:互联网 发布:iis7.5 php 500错误 编辑:程序博客网 时间:2024/04/25 19:09

题目

Description

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

Input

每组数据前有一个N(<1000),表示跟随的整数P(0

Output

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

Sample Input

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

Sample Output

2 3 667 677
None


代码块

//根据题目可以知道,输出是从小到大的,所以要进行排序

import java.util.Scanner;public class Main{    public static void main(String[] args) {        Scanner cn = new Scanner(System.in);//输入流        while (cn.hasNext()) {//多组输入            int n = cn.nextInt();            if (n == 0) return;//输入0 结束            int len = 0;            int len1 = 0;            int[] a = new int[1001];            int[] b = new int[1001];            int[] z = new int[1001];            for (int i = 0; i < n; i++) {                a[i] = cn.nextInt();            }            sort(a, n);//对输入的数进行排序            for (int i = 0; i < n - 1; i++) {//从其中找到所有的相关数,并存在一个数组中                for (int j = i + 1; j < n; j++) {                    if (compare(a[i], a[j])) {                        z[len] = a[j];                        len++;                        break;                    }                }            }            for (int i = 0; i < n; i++) {//用循环找到原来的数组中和相关数数组不相关的数,并输出                boolean flag = false;                for (int j = 0; j < len; j++) {                    if (compare(z[j], a[i])) {                        flag = true;                           }                }                if (!flag) {                    b[len1] = a[i];                    len1++;                }            }            if (len1 == 0) {                System.out.println("None");            } else {                for (int i = 0; i < len1 - 1; i++) {                    System.out.print(b[i] + " ");                }                System.out.println(b[len1 - 1]);            }        }        cn.close();    }    private static boolean compare(int q, int w) {        int[] x = new int[1001];        int[] y = new int[1001];        int i = 0, j = 0;        while (q > 0) {            x[i] = q % 10;            q /= 10;            i++;        }        while (w > 0) {            y[j] = w % 10;            w /= 10;            j++;        }        sort(x, i);        sort(y, j);        if (i != j) {            return false;        } else {            for (int k = 0; k < i; k++) {                if (x[k] != y[k])                    return false;            }        }        return true;    }    private static void sort(int[] a, int n) {        for (int i = 0; i < n; i++) {            for (int j = i + 1; j < n; j++) {                if (a[i] > a[j]) {                    int t = a[i];                    a[i] = a[j];                    a[j] = t;                }            }        }    }}
0 0