所以基本上我把这个问题解释如下:
3
7 4
2 4 6
8 5 9 3
应比较起点下方的两个数字,并选择较大的数字作为新数字。所以在这种情况下,它将是3,然后是7,然后是4,然后是9.总结它们,得到23的答案。我写了一个程序来实现这个目的:
public class ProblemEighteen {
private static int pos = 1;
public static void main(String[] args) {
try {
Scanner in = new Scanner(new File("Problem18Text"));
int sum = 0;
while (in.hasNextLine()) {
final String line = in.nextLine();
int big = getBiggestNum(line);
sum += big;
System.out.println(big);
}
System.out.println(sum);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static int getBiggestNum(String line) {
final String[] numbers = line.split(" ");
if (numbers.length == 1) {
pos = 1;
return Integer.parseInt(numbers[0]);
} else {
int i = 1;
int numOne = -1;
int numTwo = -1;
for (final String num : numbers) {
if (pos == i) {
numOne = Integer.parseInt(num);
} else if (pos + 1 == i) {
numTwo = Integer.parseInt(num);
}
i++;
if (numOne != -1 && numTwo != -1)
break;
}
if (numOne > numTwo) {
return numOne;
} else {
pos += 1;
return numTwo;
}
}
}
它适用于我上面给出的例子,但当我把实际问题解决时,它说我弄错了(我得到了1064)。我添加了一个打印声明,看看它选择了什么数字,它让它们变好了(基于我如何理解我想要找到的东西)但我仍然弄错了......任何人都知道为什么?
答案 0 :(得分:0)
我已经有一段时间了,因为我已经解决了这个问题,但是你会发现从三角形底部开始并向前迈进是最好的。特别是,当你遇到问题67时。
如果您将数据作为baum建议读入数组,那么您的数据将如下所示:
3 0 0 0
7 4 0 0
2 4 6 0
8 5 9 3
所以从底部开始,一次取两个数字,然后将一个总和与下一行中的相邻数字进行比较。
8 + 2 = 10 or 5 + 2 = 7. 10 is greater so replace the 2 with the 10.
5 + 4 = 9 or 9 + 4 = 13. 13 is greater so replace the 4 with the 13.
9 + 6 = 15 or 3 + 6 = 9. 15 is greater so replace the 6 with 15.
现在向上移动一行并执行相同的检查,直到你到达最顶层,顶部应该包含正确的答案。