給出一個數字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了