方法一:暴力搜索。复杂度等于搜索下限减去上限:
方法二:寻找所有三个数的组合的最小众倍数,取其中最小的那个。复杂度等于O(n^3),n为输入数的个数,本题 n = 5。
如何求3个数a,b,c的最小众倍数?
b*c
,a*c
的最大公约数A; a*c
,a*b
的最大公约数B; (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; } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); int d = sc.nextInt(); int e = sc.nextInt(); int count = 0; int result=1; for(result=1; result<Integer.MAX_VALUE; result++) { if(result % a == 0) count++; if(result % b == 0) count++; if(result % c == 0) count++; if(result % d == 0) count++; if(result % e == 0) count++; if(count >= 3) break; else count = 0;//若count值小于3,则count置为0 } System.out.println(result); } }
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ int n; vector<int> res; while(cin>>n){ res.push_back(n); } sort(res.begin(),res.end()); for(int i=res[2];;i++){//i至少得是第三个数 int count=0; for(int j=0;j<5;j++){ if(i%res[j]==0) count++; } if(count>=3){cout<<i<<endl;break;} } }
#include <iostream> #include <vector> #include <algorithm> using namespace std; int gbs(int num1, int num2) { int x1 = num1*num2; while(num1 != num2) { if(num1 > num2) num1 = num1 - num2; else num2 = num2 - num1; } return x1/num1; } int gbs3 (int a, int b, int c) { int d = gbs(a,b); return gbs(d,c); } int main() { vector <int> data; for(int i=0; i<5; i++) { intn = 0; cin >> n; data.push_back(n); } int res = gbs3(data[0], data[1], data[2]); for(int i=0; i<5; i++) { for(int j=i+1; j<5; j++) { for(int k=j+1; k<5; k++) { int tmp = gbs3(data[i], data[j], data[k]); res = min(res, tmp); } } } cout << res; return 0; } |
importjava.util.*; publicclassMain { publicstaticvoidmain(String[] args) { int[] arr =newint[5]; Scanner input =newScanner(System.in); for(inti=0;i<5;i++) { arr[i] = input.nextInt(); } intcount =0; intresult =0; Arrays.sort(arr);//将数组排序 for(inti = arr[2];;i++) {//最小的最小众倍数肯定是大于或等于arr[2] count =0; for(intj=0;j<5;j++) { if(i%arr[j]==0) { count++;//每满足一次条件加1 } } if(count >=3) {//如果count>=3 则满足题目条件 result = i; break; } } System.out.println(result); } } |
import java.util.*; public class Main { public static void main(String[] args) { int[] arr = new int[5]; Scanner input = new Scanner(System.in); for(int i=0;i<5;i++) { arr[i] = input.nextInt(); } int count = 0; int result = 0; Arrays.sort(arr);//将数组排序 for(int i = arr[2];;i++) {//最小的最小众倍数肯定是大于或等于arr[2] count = 0; for(int j=0;j<5;j++) { if(i%arr[j]==0) { count++;//每满足一次条件加1 } } if(count >= 3) {//如果count>=3 则满足题目条件 result = i; break; } } System.out.println(result); } }