ALGO 2 最大最小公倍數 貪心演算法

2021-08-15 18:06:49 字數 1691 閱讀 5555

問題描述

已知乙個正整數n,問從1~n中任選出三個數,他們的最小公倍數最大可以為多少。

輸入格式
輸入乙個正整數n。

輸出格式
輸出乙個整數,表示你找到的最小公倍數。

樣例輸入

9 樣例輸出

504

資料規模與約定

1 <= n <= 106。

**來自

#include 

using

namespace

std;

int main()

cout

0;

}

對別人的**分析學到了一點東西,這個我只想到了讓最大的三個數相乘,這麼想好像過於簡單了哈,研究之後發現分為三種情況。

原則:盡可能讓最大的兩個數相乘,相鄰的兩個數最小公倍數一定數他們的乘積。

**思路:

1、奇數的時候就是最大的三個數相乘

2、偶數時又分為兩種:

①是偶數的話,最大的相鄰的三個數,n和n-2一定可以約分2,那麼就需要讓最小的那個數-1在相乘,即為n*(n-1)*(n-2-1)

②是偶數同時也是3的倍數,在採取n*(n-1)*(n-2-1)的公式會不行,因為n和n-3會有公約數3,在-1會有偶數的公約數出現,所以只能讓三個數同時-1,變成n是奇數的問題來求解。

舉個例子:

1、當n為奇數:7 8 9,最大公倍數就是7*8*9

2、當n為偶數:

①不是3的倍數:12 13 14,最大公倍數是14*13*(12-1),因為12和14可以約分,11就沒有公約數

②是3的倍數:16 17 18,最大公倍數是17*16*15,因為18*17*(16-1),15可以和18約分,所以讓n變成奇數的情況來求。

貪心演算法

貪心演算法最經典的例子,給錢問題。

比如中國的貨幣,只看元,有1元2元5元10元20、50、100

如果我要16元,可以拿16個1元,8個2元,但是怎麼最少呢?

如果用貪心算,就是我每一次拿那張可能拿的最大的。

比如16,我第一次拿20拿不起,拿10元,ok,剩下6元,再拿個5元,剩下1元

也就是3張 10、5、1。

每次拿能拿的最大的,就是貪心。

但是一定注意,貪心得到的並不是最優解,也就是說用貪心不一定是拿的最少的張數

貪心只能得到乙個比較好的解,而且貪心演算法很好想得到。

再注意,為什麼我們的錢可以用貪心呢?因為我們國家的錢的大小設計,正好可以使得貪心演算法算出來的是最優解(一般是個國家的錢幣都應該這麼設計)。如果設計成別的樣子情況就不同了

比如某國的錢幣分為 1元3元4元

如果要拿6元錢 怎麼拿?貪心的話 先拿4 再拿兩個1 一共3張錢

實際最優呢? 兩張3元就夠了

總結:

佩服那些搞數學研究的人,當然也佩服我們it行業的,數學家研究出來的演算法,程式設計師來實現,大概都是天才。今天了解了一點貪心演算法,以前從沒有聽說過,人類的智慧型真是無窮的,數學家+程式設計師=天才。

ALGO 2 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9 樣例輸出 504 資料規模與約定 1 n 10 6。分析 這是一道數學問題 數學知識 如果三個數互為質數,那麼這三個數的乘積...

藍橋杯ALGO 2 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。理解 貪心 數學知識 相鄰自然數互質,相鄰的奇數互質 如果三個數互為質數,那麼...

藍橋杯 ALGO 2 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少 輸入格式 輸入乙個正整數n 輸出格式 輸出乙個整數,表示你找到的最小公倍數 樣例輸入9 樣例輸出 504 資料規模與約定 1 n 106 10 6 106 分析 原來的思路是只需找到1 n中最大的三個數字使得g.c...