import java.util.Scanner; import java.util.Collections; import java.util.List; import java.util.ArrayList; import java.lang.Math; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static int MaxGongYin2(int a,int b){ int x = 1; for(int i=100;i>=1;i--){ if(a%i==0 && b%i==0){ x = i; break; } } return (a*b)/(x); } public static int MaxGongYin3(int a,int b,int c){ int tmp = MaxGongYin2(a,b); return MaxGongYin2(tmp,c); } public static void main(String[] args) { String[] inputS = new Scanner(System.in).nextLine().trim().split(" "); // 注意 hasNext 和 hasNextLine 的区别 ArrayList<Integer> arr = new ArrayList<>(); for(int i=0;i<5;i++){ int num = Integer.parseInt(inputS[i]); arr.add(num); } Collections.sort(arr); int res = Integer.MAX_VALUE; //1.穷举 for(int i=0;i<arr.size();i++){ for(int j=i+1;j<arr.size();j++){ for(int k=j+1;k<arr.size();k++){ res = Math.min(res,MaxGongYin3(arr.get(i),arr.get(j),arr.get(k))); } } } //2.找特例 for(int i=2;i<arr.size();i++){ int divideNum = 0; for(int j=0;j<i;j++){ if(arr.get(i)%arr.get(j)==0) { divideNum+=1; } if(divideNum>=2) { res = res = Math.min(res,arr.get(i)); break; } } } System.out.println(res); } }
别看代码长,核心思路很短
需要知道的数学知识:两个数a和b的最小公倍数 = a*b/a和b的最大公因数
而三个数a,b,c的最小公倍数其实就是:a和b的最小公倍数tmp先求出来,再求tmp和c的最小公倍数,等于是求2次2个数的最小公倍数
所以才有了MaxGongYin2和MaxGongYin3两个函数,看起来多实际上很少
主函数Main这边就是先穷举,找到三个数情况下的最小公倍数,然后再去找特例,特例情况就是存在一个数能够整除其他2个数