输入包括t+1行,第一行包括一个整数t(1 ≤ t ≤ 10), 接下来t行,每行一个整数x(1 ≤ x ≤ 10^6)
对于每个x,如果可能重排之后变为自己的倍数输出"Possible", 否则输出"Impossible".
2 14 1035
Impossible Possible
import java.util.Scanner; import java.util.Arrays; //思路:逆向思维,主动找出x的2至9倍的数字y,再判断数字y是否是由x交换数位得到。 //1、若x与y的位数不同,返回false //2、如果x,y位数相同,分别将x,y的数位存入数组arr1[],arr2[],然后再sort,再比较 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); int []arr = new int[t]; for(int i=0;i<t;i++){ arr[i]=in.nextInt(); } for(int i=0;i<t;i++) for(int j=2;j<=9;j++){ if(judge(arr[i],arr[i]*j)) { System.out.println("Possible"); break; } if(j==9){ System.out.println("Impossible"); } } } public static boolean judge(int x,int y){ String s1 = ""+x; String s2 = ""+y; if(s1.length()!=s2.length()) return false; int []arr1 = new int[s1.length()]; for(int i=0;i<s1.length();i++){ arr1[i] = s1.charAt(i)-'0'; } Arrays.sort(arr1); int [] arr2 = new int[s2.length()]; for(int i=0;i<s2.length();i++){ arr2[i]=s2.charAt(i)-'0'; } Arrays.sort(arr2); for(int i=0;i<s1.length();i++){ if(arr1[i]!=arr2[i]){ return false; } } return true; } }