最简单易懂的python3程序,时间63ms
使用hash表,先遍历i,再遍历n,并将n*a[i]这一索引存入hash表格中,最后输出hash表中有等于3的索引
import sys a=list(map(int,sys.stdin.readline().strip().split())) buffer_dict={} n=1 while n: for i in range(0,5): if not buffer_dict.get(n*a[i],0): buffer_dict[n*a[i]]=1 else: buffer_dict[n*a[i]]+=1 if buffer_dict[n*a[i]]>2: print(n*a[i]) n=-1 break n+=1
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.Arrays; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] params = br.readLine().trim().split(" "); int[] arr = new int[5]; for(int i = 0; i < 5; i++) arr[i] = Integer.parseInt(params[i]); Arrays.sort(arr); for(int num = 4; num <= arr[2]*arr[3]*arr[4]; num++){ if(judge(arr, num)){ System.out.println(num); break; } } } private static boolean judge(int[] arr, int num) { int count = 0; for(int i = 0; i < 5; i++){ if(arr[i] > num) break; if(num % arr[i] == 0) count ++; } return count >= 3; } }
#include <bits/stdc++.h> using namespace std; int F(int x, int y, int z){ int s; s = x*y/__gcd(x, y); s = s*z/__gcd(s, z); return s; } int main(){ int a[5], Min=INT_MAX; for(int i=0;i<5;i++) scanf("%d", &a[i]); for(int i=0;i<5;i++) for(int j=i+1;j<5;j++) for(int k=j+1;k<5;k++) Min = min(Min, F(a[i], a[j], a[k])); printf("%d\n", Min); return 0; }
//dfs import java.util.*; public class Main{ private static int mm=Integer.MAX_VALUE; public static void main(String[] args){ Scanner sc=new Scanner(System.in); String[] s=sc.nextLine().split(" "); int[] ans=new int[5]; for(int i=0;i<5;i++) ans[i]=Integer.parseInt(s[i]); //Arrays.sort(ans); for(int i=0;i<5;i++) dfs(ans,0,i,1); System.out.print(mm); } private static void dfs(int[] ans,int k,int index,int mic){ if(k==2){ return; } for(int i=index+1;i<5;i++){ int mid=col(ans[i],ans[index]); mid=col(mic,mid); dfs(ans,k+1,i,mid); if(k==1) mm=Math.min(mm,mid); } } private static int col(int a,int b){ int ma=a*b; if(a>b){ while(b>0){ int mi=a%b; a=b; b=mi; } return ma/a; } else{ while(a>0){ int mi=b%a; b=a; a=mi; } return ma/b; } } }
最小公倍数是两个数的乘积除以两者的最大公约数; 三个数的最小公倍数是前两个数的最小公倍数和第三个数的最小公倍数; 5个数取3个一共10种组合; 运用以上三点就可以解答该题了。 import java.util.Arrays; import java.util.Scanner;import java.util.Arrays;
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int[] arrs=new int[5]; for(int i=0;i<5;i++){ arrs[i]=sc.nextInt(); } getResult(arrs); } private static void getResult(int[] arrs) { int res=Integer.MAX_VALUE; for(int i=0;i<3;i++){ for(int j=i+1;j<4;j++){ for(int k=j+1;k<5;k++){ res=Math.min(res, fun(arrs[i],arrs[j],arrs[k])); } } } System.out.println(res); } //求三个数的最小公倍数 private static int fun(int i, int j, int k) { return fun3(fun3(i,j),k); } //求两个数的最小公倍数,穷举法 private static int fun2(int i, int j) { int m=Math.max(i, j); int temp=i*j; for(int k=m;k<temp;k++){ if(k%i==0&&k%j==0){ return k; } } return temp; } //最小公倍数=两数相乘/最大公约数 private static int fun3(int i,int j){ return i*j/***(i,j); } //***求最大公约数 private static int ***(int i, int j) { return j==0?i:***(j, i%j); } }
import java.util.*; public class Main { public static final int MAX = 105; private static int[] arr = new int[5]; private static final int INT_MAX = 0X3f3f3f; private static int fresult = INT_MAX; public static void main(String[] args) { Scanner sc = new Scanner(System.in); for (int i=0; i!=5; i++) { arr[i] = sc.nextInt(); } solve(0,3,0); System.out.println(fresult); } private static void solve(int cur, int count, int mem) { if (5 - cur < count ) { return; } if (count == 0) { int[] ans = new int[3]; int index = 0; for (int i =0; i!=5; i++) { if (((mem >> i) & 1) == 1) { ans[index++] = i; } } int result = arr[ans[0]]; for (int i=1; i!=3; i++) { result = getMinCM(result, arr[ans[i]]); } fresult = Math.min(fresult, result); return; } solve(cur+1, count-1, mem | (1 << cur)); solve(cur+1, count, mem); } private static int getMinCM(int a, int b) { return a * b / gcd(a, b); } private static int gcd(int m,int n) { if (m % n == 0) { return n; } else { return gcd(n,m % n); } } }
#include<iostream> #include<algorithm> using namespace std; int func(int a,int b) { int temp1=a,temp2=b,temp=0; while(temp2>0) { temp=temp1%temp2; temp1=temp2; temp2=temp; } return a*b/temp1; } int main() { int arr[6]={0},a[11]={0},c=1; for(int i=1;i<=5;i++) { cin>>arr[i]; } sort(arr+1,arr+6); for(int i=1;i<=3;i++) { for(int j=i+1;j<=4;j++) { for(int k=j+1;k<=5;k++) { a[c]=func(func(arr[i],arr[j]),arr[k]); c++; } } } sort(a+1,a+11); cout<<a[1]<<endl; }
package main import ( "fmt" "math" ) func main() { arr:=make([]int,5) for i:=0;i<5;i++{ fmt.Scan(&arr[i]) } ans:=math.MaxInt32 var dfs func([]int,int) dfs=func(path []int,idx int){ if len(path)>=3{ if len(path)>3{ return } x:=f(path[0],path[1],path[2]) if x<ans{ ans=x } return } for i:=idx;i<5;i++{ path=append(path,arr[i]) dfs(path,i+1) path=path[:len(path)-1] } } dfs([]int{},0) fmt.Print(ans) } func f(a,b,c int)int{ basic:=max(a,max(b,c)) for i:=basic;;i++{ if i%a==0&&i%b==0&&i%c==0{ return i } } return basic } func max(a,b int)int{ if a>b{ return a } return b }
#include<bits/stdc++.h> using namespace std; int zxw(vector<int> vi) { int x = 1; while (x++) { int v = 0; for (int i = 0; i < vi.size(); i++) { if (x % vi[i] == 0)v++; if (v == 3)return x; } v = 0; } } int main(void) { int z = 5, x = 1; vector<int> vi; while (z--) { int c; cin >> c; vi.push_back(c); } sort(vi.begin(), vi.end()); cout << zxw(vi); }暴力
import java.util.*; public class Main { public static int Min_divisor(int m,int n){ int r=m%n; while(r>0){ m=n; n=r; r=m%n; } return n; } public static void main(String args[]){ Scanner scanner=new Scanner(System.in); int[] pt=new int[5]; for(int i=0;i<5;i++){ pt[i]=scanner.nextInt(); } Arrays.sort(pt); int Min=Integer.MAX_VALUE; int m1,m2; for(int i=0;i<3;i++){ for(int j=i+1;j<4;j++){ for(int k=j+1;k<5;k++){ m1=pt[i]/Min_divisor(pt[i],pt[j])*pt[j]; m2=m1/Min_divisor(m1,pt[k])*pt[k]; Min=Math.min(Min,m2); } } } System.out.println(Min); } }
import java.util.Scanner; import java.math.BigInteger; public class Main{ public static void main(String[] args){ int[] arr = new int[5]; int end = Integer.MAX_VALUE; Scanner sc = new Scanner(System.in); for (int idx=0; idx < arr.length; idx++) { arr[idx] = sc.nextInt(); } for (int i = 1; i <= end; i++){ int count = 0; for(int idx = 0; idx < arr.length; idx++){ if(i%arr[idx] == 0){ count++; } } if(count >= 3){ System.out.println(i); break; } } } }
#include <iostream> using namespace std; int get_min_mul(int a, int b) //求两个数的最小公倍数 { int bigger, smaller, tmp; (a > b) ? (bigger = a, smaller = b) : (bigger = b, smaller = a); while(smaller != 0) { tmp = bigger % smaller; bigger = smaller; smaller = tmp; } return (a * b / bigger); } int get_min_mul(int a, int b, int c) //求三个数的最小公倍数 { int tmp; tmp = get_min_mul(a, b); return get_min_mul(tmp, c); } int main(int argc, char *argv[]) { int a, b, c, d, e, tmp, ans; cin >> a >> b >> c >> d >> e; ans = get_min_mul(a, b, c); tmp = get_min_mul(a, b, d); ans = (ans < tmp) ? ans : tmp; tmp = get_min_mul(a, b, e); ans = (ans < tmp) ? ans : tmp; tmp = get_min_mul(a, c, d); ans = (ans < tmp) ? ans : tmp; tmp = get_min_mul(a, c, e); ans = (ans < tmp) ? ans : tmp; tmp = get_min_mul(a, d, e); ans = (ans < tmp) ? ans : tmp; tmp = get_min_mul(b, c, d); ans = (ans < tmp) ? ans : tmp; tmp = get_min_mul(b, c, e); ans = (ans < tmp) ? ans : tmp; tmp = get_min_mul(b, d, e); ans = (ans < tmp) ? ans : tmp; tmp = get_min_mul(c, d, e); ans = (ans < tmp) ? ans : tmp; cout << ans << endl; return 0; }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * @author wylu */ public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] strs = br.readLine().split(" "); int[] arr = new int[strs.length]; for (int i = 0; i < arr.length; i++) { arr[i] = Integer.parseInt(strs[i]); } int res = 0, count = 0; while (count < 3) { ++res; count = 0; for (int e : arr) if (res % e == 0) count++; } System.out.println(res); } }