繁体   English   中英

找出三角形的最大和

[英]Find the Maximum Sum in a triangle

我想在一个三角形(金字塔)中求和最大,但是必须收集非素数,这是我的代码:

    private static int[][] arrlist;
    private static ArrayList list = new ArrayList();

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

        arrlist=data;
        int sum=0;
              func(0,0,sum);
        int max= (int)Collections.max(list);
        System.out.println("list"+list);
        System.out.println("max-" + max);
    }

  private static void func(int x, int y, int sum) {
             //stop status
            if ((isPrime(arrlist[x + 1][y])) && (isPrime(arrlist[x + 1][y + 1])) || x == 13)
            {
                list.add(sum);
                return;
            }
            func(x + 1, y, sum + arrlist[x + 1][y]);
            func(x + 1, y + 1, sum + arrlist[x + 1][y+1]);
        }
        public static boolean isPrime(int num) {
            for (int i = 2; i < num; i++) {
                if (num % i == 0)
                    return false;
            }
            return true;
        }

这是我的new.txt :(只允许向下和对角线走,并且只能在非素数上)

215
193   124
117   237   442
218   935   347   235
320   804   522   417   345
229   601   723   835   133   124
248   202   277   433   207   263   257
359   464   504   528   516   716   871   182
461   441   426   656   863   560   380   171   923
381   348   573   533   447   632   387   176   975   449
223   711   445   645   245   543   931   532   937   541   444
330   131   333   928   377   733   017   778   839   168   197   197
131   171   522   137   217   224   291   413   528   520   227   229   928
223   626   034   683   839    53   627   310   713   116   629   817   410   121
924   622   911   233   325   139   721   218   253   223   528   233   230   124   233

此代码输出:8128,但不正确。 正确答案:8186

我在哪里犯错? 请帮帮我..

尝试这个。

private static int func(int x, int y) {
    if (x >= arrlist.length)
        return 0;
    int self = arrlist[x][y];
    if (isPrime(self))
        return 0;
    else
        return self + Math.max(func(x + 1, y), func(x + 1, y + 1));
}

    System.out.println("max-" + func(0, 0));  // -> max-8186

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM