方法一:暴力搜索。复杂度等于搜索下限减去上限: 搜索下限:第3大的数。
搜索上限:前3小的数的乘积。
方法二:寻找所有三个数的组合的最小众倍数,取其中最小的那个。复杂度等于O(n^3),n为输入数的个数,本题 n = 5。
如何求3个数a,b,c的最小众倍数? 求出b*c,a*c的最大公约数A;
求出a*c,a*b的最大公约数B;
求出A,B的最大公约数C;
使用(a*b*c) / C即得到结果。
代码如下: import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] nums = new int[5];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
nums[i] = sc.nextInt();
}
System.out.println(zbs(nums));
}
public static int zbs(int[] seq) {
int min = Integer.MAX_VALUE;
for (int i = 0; i < seq.length; i++) {
for (int j = i+1; j < seq.length; j++) {
for (int k = j+1; k < seq.length; k++) {
min = Math.min(min, findZBS(seq[i], seq[j], seq[k]));
}
}
}
return min;
}
public static int findZBS(int a, int b, int c) {
return (a*b*c) / GCD(GCD(b*c, a*c), GCD(a*c, a*b));
}
public static int GCD(int a, int b) {
int c;
while ( b != 0 ) {
c = a % b;
a = b;
b = c;
}
return a;
}
}