蓝桥杯java 算法提高 排列式
问题描述
7254是一个不寻常的数,因为它可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次
输出所有这样的不同的式子(乘数交换被认为是相同的式子)
结果小的先输出;结果相同的,较小的乘数较小的先输出。
输出所有这样的不同的式子(乘数交换被认为是相同的式子)
结果小的先输出;结果相同的,较小的乘数较小的先输出。
输出格式
每一行输出一个式子,式子中的等号前后空格、乘号(用字母x代表)前后空格
较小的乘数写在前面
较小的乘数写在前面
样例输出
问题中的式子在结果中会出现一行如下:
7254 = 39 x 186
7254 = 39 x 186
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<A> list = new ArrayList<>(); for (int i = 1; i < 2000; i++) { for (int j = 1; j <= i; j++) { int ji = i * j; String s = "" + ji + i + j; if (s.length() == 9 && f(s)) { A a = new A(); a.ji = i * j; a.cheng = j; a.beiCheng = i; list.add(a); } if (s.length() > 9) { continue; } } } Collections.sort(list); for (A a : list) { System.out.println(a.ji + " = " + a.cheng + " x " + a.beiCheng); } } public static boolean f(String s){ char[] a = {'1','2','3','4','5','6','7','8','9'}; char[] b = s.toCharArray(); Arrays.sort(b); int i; for(i=0;i<9;i++){ if(a[i]!=b[i]){ break; } } if(i==9){ return true; }else{ return false; } } } class A implements Comparable<A> { int ji; int beiCheng; int cheng; public int compareTo(A o) { if (ji == o.ji) { return cheng - o.cheng; } else { return ji - o.ji; } } }