3 2 最優分解問題

2021-10-02 01:27:28 字數 973 閱讀 6491

利用貪心演算法解決最優分解問題

將正整數n分成若干互不相同的自然數和,且使得自然數的乘積最大。

小學時候學過,周長相同的正方形面積要大於長方形面積。這意味著:在總和相同的情況下,自然數間越接近,乘積越大。本道題可以用這樣的思路去解。要想使自然數的乘積最大:

# todo:獲取基本因數

def getindex(

): n = int(input(

"請輸入乙個正整數:"

)) a =

l = n

for i in range(2,500):

l = l-i

if l

break

return a,l

輸入的資料是正整數,返回值a是乙個列表,元素是從2開始的連續整數,l是餘數,需要繼續處理

# todo:將餘數分攤給前面的因數

def yushu(a,l):

for i in range(l):

a[i]

= a[i]+1

return a

這一步執行的是將餘數分攤給前面的因數,返回值是最終的因數。

# todo:因數相乘

def multiplication(a):

m = 1

for i in a:

m = m*i

return m

這一步的返回值是最終乘積。

餘數4平均分攤給前4個數,實驗結果符合預期,程式正常退出。

解決問題的關鍵在於理解貪心中貪在何處,我認為在整數分解過程中:

1.分解成盡可能多的數,

2.每個數盡量接近。

這兩點體現了貪心思想。

最優分解問題

題目描述 設n是乙個正整數,現在要求將n分解為若干個互不相同的自然數的和,使這些自然數的乘積最大。輸入輸入乙個n n 100 輸出輸出最大的乘積 樣例輸入 1樣例輸出 1如果不理解思路,代入資料算一下就明白了 1的結果是1,2的結果是2,3的結果是3 include includeusing nam...

貪心 最優分解問題

設n是乙個正整數,現要求將n分解為若干個互不相同的自然數的和,使這些自然數的乘積最大.若a b n,則 a b 越小,a b就越大 當n 4時,乘積4時,n n a a,a 2 n n a 此時乘積 n 貪心策略 把n分成從2開始的連續自然數,如果最後剩下乙個數均勻地分給前面各項 具體 如下 inc...

最優自然數分解問題

description 問題描述 設n是乙個正整數。1 現在將n分解為若干個互不相同的自然數之和,且使這些自然數的乘積最大。2 現在將n分解為若干個自然數之和,且使這些自然數的乘積最大。程式設計任務 對於給定的正整數n,程式設計計算問題 1 和 2 的最優分解的最大乘積。注意 這裡的自然數不含0但包...