列舉演算法 和積三組

2021-08-11 18:25:22 字數 1028 閱讀 9845

演算法分析:

設n為正整數,試把整數3n分解為9個互不相同的正整數a,b,c,d,e,f,g,h,i,然後把這9個正整數分成(a,b,c)、(d,e,f)與(g,h,i)三個三元組(約定a

a + b + c = d + e + f = g + h + i = n

a * b * c = d * e * f = g * h * i

那麼(a,b,c)、(d,e,f)、(g,h,i)就為乙個基於n的合積相等特性。

例如: n = 45

4 + 20 + 21 = 5 + 12 + 28 = 7+ 8 + 30 = 45

4 * 20 * 21 = 5 * 12 * 28 = 7 * 8 * 30 = 1680

因9個不同正整數之和至少為45,由此可知正整數n > 14。

1) 設定列舉迴圈

由於 a + b + c = n,且a < b < c,因而a、b迴圈取值如下:

a: 1~(n - 3)/3,因b比a至少大1,c比a至少大2,即a至多為(n - 3)/3。

b: a + 1~(n - a - 1)/2。因c比b至少大1,即b至多為(n - a - 1)/2。

c = n - a - b,以確保a < b < c且a + b + c = n

設定d、e迴圈與g、h迴圈基本同上,只是由於d > a,因而d起點為 a + 1;g > d,因而g起點為d + 1。

2) 檢驗和積相等

在設定的列舉迴圈中,確保了三個三元組和相等,若abc = def = ghi,則表示積相等,用count統計組數。

3) 省略相同整數的檢驗

若兩個和相等的3元組中,若等號兩邊有部分數相同,部分數不同,不可能有積相等。

**實現:

/**

* 和積三組

*/public static void groupby()}}

}}

} }input.close();

}

質數的和與積 列舉

兩個質數的和是 s,它們的積最大是多少?輸入格式 乙個不大於 10000 的正整數s,為兩個質數的和。輸出格式 乙個整數,為兩個質數的最大乘積。資料保證有解。輸出時每行末尾的多餘空格,不影響答案正確性 樣例輸入 50樣例輸出 589解題思路1 通過了19個知識點 還有最後乙個測試點 沒有過去 不知道...

C 遞增三元組(列舉 字首和)

給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1 i,j,k n ai本題的關鍵在於發現每個遞增三元組中a i 和c k 都要受b j 約束,故應該通過列舉b j 計算三元組的個數。同時本題的易錯點是統計各個值出現次數的...

演算法之列舉和貪心

列舉 亦稱窮舉 演算法 原理 列舉法的本質就是從所有候選答案中去搜尋正確的解,使用該演算法需要滿足兩個條件 1 可預先確定候選答案的數量 2 候選答案的範圍在求解之前必須有乙個確定的集合。核心思想 列舉所有的可能。列舉演算法簡單粗暴,他暴力的列舉所有可能,盡可能地嘗試所有的方法。雖然列舉演算法非常暴...