蓝桥杯—算法训练 最大最小公倍数 (简单贪心思想)

时间:2021-12-15 11:12:00

问题描述

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

输入格式

输入一个正整数N。

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

1 <= N <= 106

题意分析:在n个数中找任意三个数的最小公倍数,并且求得最大的最小公倍数(重点在于最大)。

思路分析:最大 最小公倍数,联想到两个数的求最大最小公倍数,即两个数的乘积(注:连续的两个自然数是互斥的)。

                   同样,我们可以拿最后三个数来做考虑。

                   1.当n为奇数时,n,n-1,n-2为奇偶奇,里面只有一个偶数,所以不会有2这个因子。这三个数相差不到3,所以也不会有因子3,故符合题意。

                   2.当n为偶数时,n,n-1,n-2为偶奇偶,此时n,n-2肯定含有因子2,所以除于2不值得。所以考虑将n-2 换成n-3,变成奇偶奇,此时也有一个问题,

                   n和n-3,如果n%3==0,则除于3更不值得。仍根据奇偶奇的原则,变动偶数n为n-2,此时换成n-1,n-2,n-3和1情况一样。故此时符合题意。

     

#include<stdio.h>
long long n;
int main ()
{
scanf("%lld",&n);
long long sum=0;
if(n<=2) //注意特殊情况,只有一个或者两个数的时候。
sum=n;
else if(n%2)
{
sum=n*(n-1)*(n-2);
}
else
{
if(n%3)
sum=n*(n-1)*(n-3);
else
sum=(n-2)*(n-1)*(n-3);
}
printf("%I64d\n",sum);
}
//学会类比,学会贪心思想(只顾眼前的,但却能得到最优解)