蓝桥杯 ALGO-2 最大最小公倍数 Java

来源:互联网 发布:奥运会标志 知乎 编辑:程序博客网 时间:2024/06/03 21:11

问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式
输入一个正整数N。

输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。

import java.util.Arrays;import java.util.Scanner;public class Main {    public static int num;    public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){    int n=sc.nextInt();    int arr[]=new int [n*(n-1)/2];    int arr1[]=new int [n];    int f;    for(int i=1;i<n;i++){        for(int j=i+1;j<=n;j++){            gcd(i, j);        arr[j]=i*j/num;    }    }    Arrays.sort(arr);    f=arr[n*(n-1)/2-1];    for(int i=1;i<=n;i++){        gcd(f, i);        arr1[i-1]=i*f/num;    }    Arrays.sort(arr1);    System.out.println(arr1[n-1]);}    }    public static void gcd(int a,int b){        if(a<b){            int temp=a;            a=b;            b=temp;        }        if(b==0){        num=a;        }        else{            gcd(b, a%b);        }    }}

在蓝桥杯的oj 上过不去,Java数组装不下整体思路是对的。用了辗转相除算法,以及两数最大公约数与最小公倍数之积为两数成绩。
后来去网上参考的c++代码。

c++ AC 如下

#include<iostream>  using namespace std;  int main() {      long long n, ans;      while(cin >> n) {          if(n <= 2) {              ans = n;          }           else if(n % 2) {              ans = n * (n - 1) * (n - 2);          }          else {              if(n%3) ans = n * (n-1) * (n-3);              else ans=(n-1) * (n-2) * (n-3);          }          cout << ans << endl;      }      return 0;  }   
原创粉丝点击