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