2018蓝桥杯|算法训练|最大最小公倍数

问题描述

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

输入格式

输入一个正整数N。

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

1 <= N <= 106

答案来源:http://blog.csdn.net/liuchuo/article/details/51989099

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

(锦囊)贪心算法:

  贪心方法是一种改进的分级处理方法。他首先根据题意,选取一种度量标准,然后按照这种度量标准计算局部的最优解。(关键:选取最优度量标准)

思路:
n<=2 时 最小公倍数是n

n为奇数时 最大最小公倍数是最末三位数相乘

n为偶数时 (由于最末三位数为 偶-奇-偶型,最小公倍数是三个数乘积除以2)

  若n还是3的倍数,比如6 最大最小公倍数是(n-1)*(n-2)*(n-3)  

  若n不是3的倍数,比如8 最大最小公倍数是n*(n-1)*(n-3)  因为n-2是偶数

posted @ 2018-02-18 21:53  Emma今天敲代码了吗  阅读(600)  评论(0编辑  收藏  举报