蓝桥杯练习系统(算法训练)-ALGO-2 最大最小公倍数

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

蓝桥杯练习系统(算法训练)-ALGO-2 最大最小公倍数_第1张图片

如果按照一般的方法来做的话,不用想,绝对会超时。
举个例子

  • 当n为奇数时 比如为7 那么其在1-7中选取三个数的最大最小公倍数为7*6*5
    即是MAX = n * (n-1) * (n-2)
    因为当三个数互质且连续的时候,其最大公约数不超过2,也就是1,所以为三个数的乘积。

  • 当n为偶数的时候,比如为8,那么n-2就是偶数,也就是不满足那个定律,那么我们可以向后退一位,
    即是MAX = n * (n-1) * (n-3)
    那么n-3就满足定律了

    -接下来最后一点,当n为3的倍数的时候,if (n % 3 == 0) 比如为6
    我们可能会想到n-3、n-4都不管用、那么我们可以把n往后退一位
    即是MAX = (n-1) * (n-2) * (n-3)

代码如下:

#include<cstdio>
#include<iostream>
using namespace std; 
long long N;
int main() {
    long long ans;

    scanf("%d", &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;
}

结果如下:
蓝桥杯练习系统(算法训练)-ALGO-2 最大最小公倍数_第2张图片

我看了那组数据(博主是VIP)
91200
943672006961970

再来一张图片

我也是醉了 ….. 数据有误 如果不写if…else估计他自己也过不了…

所以是数据有误 别担心

2015年9月15日12:31:21

你可能感兴趣的:(蓝桥杯练习系统(算法训练)-ALGO-2 最大最小公倍数)