最大的最小公約數(貪心)

給出一個數字n,選1到n中任意的3個數的最大的最小公倍數

#include <iostream>
#define int long long
using namespace std;
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    int s = 0;
    if(n<=2)//這個千萬不要忘記
        s = 2;
    else if(n % 2)//n爲奇數,相鄰的兩個數互質
        s = n * (n - 1) * (n - 2);
    else {//n爲偶數
        if (n % 3)//不能被3整除,例如8,7,6;我要的就是8,7,5;
            s = n * (n - 1) * (n - 3);//將n-2換成n-3
        else//能被3整除,例如6,5,4;那我要的就是3,5,4
            s = (n - 3) * (n - 1) * (n - 2);
    }
    cout << s << endl;
    return 0;
}

覺得自己的貪心還不會,找了個題目練練手,卻發現自己菜炸了,先說這個題的思路吧
求最大公約數,三個數的乘積,除以公約數,題目要求最大
那就先選最大的三個數字吧n,n-1,n-2;
如果n是奇數,那麼就是奇數,偶數,奇數,不會有公約數2,也不會有公約數3,因爲兩個奇數之間相差2
如果n是偶數,那麼就是偶數,奇數,偶數,有公約數2,這時候把n-2換成n-3;這要比原來的大;但是別高興太早了,如果n能被3整除,將n換成n-3;這時的值也要比原來的大;爲什麼這個時候不選擇n-2換n-3?比如6,5,4,假設n-2換n-3,6,5,3;顯然還能被3整除
還有n<=2的這種情況,
綜上,這題AK了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章