找出三角形中的最大和
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
我想要三角形(金字塔)中的最大总和,但非素数必须是 集 这是我的代码:
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