剔除相关数

s

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

输入

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

输出

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

样例输入
8
213 667 3 213 43 34 677 2
3
322 232 232
0
样例输出
2 3 667 677
None


 import java.util.Scanner;

 import java.util.Arrays;

 public class Main {

    public static void main(String args[]) {

        Scanner sc = new Scanner(System.in);

      

        while(true)

        {

             int n = sc.nextInt();

             if(n==0)//---------------------如果输入0;结束

         break;

             int temp[]=new int [n];//-------------全设为0,需要删除就变成1;

             int arr[]=new int[n];//-------------原数列

             for(int i=0;i<temp.length;i++)//-------------遍历

             {

                  temp[i]=0;

           arr[i]=sc.nextInt();

            }

             Arrays.sort(arr);//-------------排序

            for(int i=0;i<arr.length;i++)//-------------功能:循环判断第i位和第x位是否符合相关数

         for(int x=i;x<arr.length;x++)

         {

         if(i==x)     //-------------

                    continue;

         if(judge( arr[i],arr[x]))//功能:如果符合,将temp[i]temp[x]=1变成1;模拟删除

         {

         temp[i]=1;

                 temp[x]=1;

         }

         }

        int sum=0;//-------------记录temp有几个留下的数

        for(int i=0;i<arr.length;i++)//-------------输出未删除的数

        {

         if(temp[i]==0)//-------------是0就是留下的

         {

         sum++;

         System.out.print(arr[i]+" ");//把留下的输出

            }

        }

        if(sum==0)//-------------如果留下的数的数量为0,则输出None

         System.out.print("None");

                System.out.println();

     }//--------------------------------while结束

    }

  

    public static boolean judge(int a,int b)//-------------功能:判断是否符合相关数

    {

      char arra[]=String.valueOf(a).toCharArray();//-----把输入的整数转换成字符

      char arrb[]=String.valueOf(b).toCharArray();

       if(arra.length!=arrb.length)//----------------------判断字符长度,不相等直接false

           return false;

       else{//-------------------------------------------长度相等的话

        int sum=0;

       for(int i=0;i<arra.length;i++)

       for(int x=0;x<arrb.length;x++)//------------------列如:4 3 5  - 3 5 4

       if(arra[i]==arrb[x])//----------相等的话变成a: a 3 5  - 3 5 a 继续循环

                          {

       sum++;//----------记录变了几次

                             arra[i]='a';

                            arrb[x]='a';

                              break;

                        }

         

       if(sum==arrb.length)   //-----------------如果全变输出true

       return true;

          return false;

       }

    }  

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值