题解 | 最小众倍数
最小众倍数
https://www.nowcoder.com/practice/3e9d7d22b7dd4daab695b795d243315b
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个数
科大讯飞公司氛围 423人发布