2016-02-18 78 views
0

我想最大總和三角形(金字塔),但非質數必須是 收集 這是我的代碼:找到最大值總和三角形

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

哪裏可以犯錯? 請幫我。

+0

請參見[如何調試(http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)的教程跟蹤問題。你得到了什麼部分款項?這與正確的價值有什麼不同? – Prune

回答

1

試試這個。

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 
+0

非常感謝@ saka1029 – eagle