利用貪心演算法解決最優分解問題
將正整數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但包...