首页 > 代码库 > 算法提高 排列式

算法提高 排列式

问题描述
  7254是一个不寻常的数,因为它可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次
  输出所有这样的不同的式子(乘数交换被认为是相同的式子)
  结果小的先输出;结果相同的,较小的乘数较小的先输出。
输出格式
  每一行输出一个式子,式子中的等号前后空格、乘号(用字母x代表)前后空格
  较小的乘数写在前面
样例输出
问题中的式子在结果中会出现一行如下:
7254 = 39 x 186
 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.Collections;
 4 import java.util.List;
 5 import java.util.Scanner;
 6 
 7 class Main{
 8     public static void main(String[] args) {
 9         List<A> list = new ArrayList<>();
10         for(int i=1;i<2000;i++){
11             for(int j=1;j<=i;j++){
12                 int ji = i*j;
13                 String s = ""+ji+i+j;
14                 if(s.length()==9&&f(s)){
15                     A a = new A();
16                     a.ji = i*j;
17                     a.cheng = j;
18                     a.beiCheng = i;
19                     list.add(a);
20                 }
21                 if(s.length()>9){
22                     continue;
23                 }
24             }
25         }
26         Collections.sort(list);
27         for(A a:list){
28             System.out.println(a.ji+" = "+a.cheng+" x "+a.beiCheng);
29         }
30     }
31     public static boolean f(String s){
32         char[] a = {‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘};
33         char[] b = s.toCharArray();
34         Arrays.sort(b);
35         int i;
36         for(i=0;i<9;i++){
37             if(a[i]!=b[i]){
38                 break;
39             }
40         }
41         if(i==9){
42             return true;
43         }else{
44             return false;
45         }
46     }
47 }
48 class A implements Comparable<A>{
49     int ji;
50     int beiCheng;
51     int cheng;
52     @Override
53     public int compareTo(A o) {
54         if(ji==o.ji){
55             return cheng-o.cheng;
56         }else{
57             return ji-o.ji;
58         }
59     }
60 }

 

算法提高 排列式