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);
}
}
方法一:暴力搜索。复杂度等于搜索下限减去上限:
方法二:寻找所有三个数的组合的最小众倍数,取其中最小的那个。复杂度等于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;
}
}
#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);
}
}