You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Java代码实现数字三角形中非质数的最大路径和计算

修改Java代码实现仅经过非质数的数字三角形最大路径和

核心思路

要实现需求,需要在动态规划过程中加入质数过滤:

  • 实现准确的质数判断函数,注意1不是质数、2是唯一偶质数等特殊情况。
  • 动态规划时,若当前数字是质数,直接标记为无效路径(用负无穷表示);若非质数,则仅从下方相邻的有效路径(非质数对应的路径和)中选择最大值累加。

修改后的完整代码

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class MaxPathSum {

    // 判断是否为质数的工具方法
    private static boolean isPrime(int num) {
        if (num <= 1) return false;
        if (num == 2) return true;
        if (num % 2 == 0) return false;
        // 检查从3到平方根的奇数
        for (int i = 3; i <= Math.sqrt(num); i += 2) {
            if (num % i == 0) return false;
        }
        return true;
    }

    public static void main(String[] args) throws Exception {
        int[][] data = Files.lines(Paths.get("src/main/triangle.txt"))
                .map(s -> Stream(s.trim().split("\\s+"))
                        .mapToInt(Integer::parseInt)
                        .toArray())
                .toArray(int[][]::new);

        // 先处理最后一行:质数标记为负无穷(无法作为终点)
        int lastRow = data.length - 1;
        for (int c = 0; c < data[lastRow].length; c++) {
            if (isPrime(data[lastRow][c])) {
                data[lastRow][c] = Integer.MIN_VALUE;
            }
        }

        // 从倒数第二行向上动态规划计算
        for (int r = data.length - 2; r >= 0; r--) {
            for (int c = 0; c < data[r].length; c++) {
                // 当前数字是质数,直接标记为无效路径
                if (isPrime(data[r][c])) {
                    data[r][c] = Integer.MIN_VALUE;
                    continue;
                }

                // 获取下方两个相邻位置的路径和,处理无效路径的情况
                int left = data[r + 1][c];
                int right = data[r + 1][c + 1];
                int maxNext = Math.max(left, right);

                // 如果下方没有有效路径,当前位置也标记为无效
                if (maxNext == Integer.MIN_VALUE) {
                    data[r][c] = Integer.MIN_VALUE;
                } else {
                    data[r][c] += maxNext;
                }
            }
        }

        // 输出结果,若顶部是质数或无有效路径会输出Integer.MIN_VALUE,可根据需求添加判断
        System.out.println(data[0][0]);
    }
}

关键修改点说明

  1. 质数判断方法:isPrime函数覆盖了所有边界情况(小于等于1的数、2、偶数、奇数),确保质数判断准确。
  2. 最后一行初始化:将最后一行中的质数设为Integer.MIN_VALUE,表示这些位置不能作为有效终点。
  3. 动态规划逻辑调整:
    • 若当前数字是质数,直接标记为无效路径,跳过后续计算。
    • 若非质数,仅从下方两个相邻位置的有效路径中取最大值累加;如果下方两个位置都是无效路径,当前位置也标记为无效。
  4. 示例验证:用你提供的示例数据运行代码,会得到预期的结果24。

内容的提问来源于stack exchange,提问作者user19370734

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:51:32