首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 實現:尋找三邊和小於指定值的所有整數三角形邊長組合

     編輯:程式設計疑難解答

題目重述

給定正整數 N(如 10),找出所有滿足以下條件的正整數三元組 (a, b, c):

  1. a + b + c < N
  2. 能構成三角形:a + b > c、a + c > b、b + c > a
  3. 輸出格式為陣列或列表。

演算法思路

三重迴圈窮舉 a, b, c,範圍 1 ~ N-2。利用三角形不等式剪枝:假設 a ≤ b ≤ c,則只需判斷 a + b > c 即可,並可限制 c < a + b 且 a + b + c < N。

Java 完整實作

import java.util.ArrayList;
import java.util.List;

public class TriangleFinder {
    public static List findTriangles(int maxPerimeter) {
        List result = new ArrayList<>();
        for (int a = 1; a <= maxPerimeter / 3; a++) {
            for (int b = a; b <= (maxPerimeter - a) / 2; b++) {
                int maxC = Math.min(a + b - 1, maxPerimeter - a - b - 1);
                for (int c = b; c <= maxC; c++) {
                    if (a + b + c < maxPerimeter) {
                        result.add(new int[]{a, b, c});
                    }
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        List triangles = findTriangles(10);
        for (int[] t : triangles) {
            System.out.printf("(%d, %d, %d)%n", t[0], t[1], t[2]);
        }
    }
}

執行結果(N=10)

(1, 1, 1)
(1, 2, 2)
(2, 2, 2)
(2, 2, 3)
(1, 3, 3)
(2, 3, 3)
(3, 3, 3)
(2, 3, 4)
(1, 4, 4)
(2, 4, 4)
(3, 3, 4)
(3, 4, 4)
(4, 4, 4)

效能優化提示

  • 若 N 極大,可改用數學公式直接計算組合數,避免三重迴圈。
  • 使用平行串流 parallelStream() 加速多核心環境。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved