Java 投影Euler问题18无法到达最后一个元素

Java 投影Euler问题18无法到达最后一个元素,java,algorithm,math,Java,Algorithm,Math,我正试图用这些算法解决欧拉投影问题18,将第一行添加到第二行,确保我们找到更大的值 通过将原始值替换为新值来对每个值进行修改 我知道我的代码没有到达每行的最后一个元素,但我如何修复它 (问题描述:从三角形的顶部到底部查找最大总数,从每行中选择一个数字,每次移动到相邻的数字。) 企图 publicstaticvoidmain(字符串参数[]){ 整数[][]={ {75}, {95,64}, {17,47,82}, {18,35,87,10}, {20,04,82,47,65}, {19,01,2

我正试图用这些算法解决欧拉投影问题18,将第一行添加到第二行,确保我们找到更大的值 通过将原始值替换为新值来对每个值进行修改

我知道我的代码没有到达每行的最后一个元素,但我如何修复它

(问题描述:从三角形的顶部到底部查找最大总数,从每行中选择一个数字,每次移动到相邻的数字。)

企图
publicstaticvoidmain(字符串参数[]){
整数[][]={
{75},
{95,64},
{17,47,82},
{18,35,87,10},
{20,04,82,47,65},
{19,01,23,75,03,34},
{88,02,77,73,07,63,67},
{99,65,04,28,06,16,70,92},
{41,41,26,56,83,40,80,70,33},
{41,48,72,33,47,32,37,16,94,29},
{53,71,44,65,25,43,91,52,97,51,14},
{70,11,33,28,77,73,17,78,39,68,17,57},
{91,71,52,38,17,14,91,43,58,50,27,29,48},
{63,66,04,68,89,53,67,30,73,16,69,87,40,31},
{04,62,98,27,23,9,70,98,73,93,38,53,60,04,23}};
对于(int i=1;i编号[i-1][k])
数字[i][j]+=数字[i-1][k+1];
其他的
编号[i][j]+=编号[i-1][k];
}
}
//如果k在中间
else if(k>0&&k编号[i-1][k-1])
数字[i][j]+=数字[i-1][k+1];
其他的
编号[i][j]+=编号[i-1][k-1];
}
否则{
//如果我们到达最后一个k
if(编号[i-1][k]>编号[i-1][k-1])
编号[i][j]+=编号[i-1][k];
其他的
编号[i][j]+=编号[i-1][k-1];
}
}
}
int x=3;
对于(int i=0;i

这里有一个与你的算法相关的提示:想象一下三角形是倒置的,顶端是底部的,顶部是底部的。考虑到这里的最佳路径,尽管在描述中,可以在任何一个方向跟踪我们的目的。

我们从底部开始,知道其中一个单元格是最佳路径中的最后一个单元格。底行上的每一对单元格都只有一个父单元格。我们从该对中选择较大的一个,并将其添加到上面的父单元格中。按照此过程从每一行到顶部


请在您的问题中添加对Euler问题的解释。但是,您确实不应该为任何Euler问题寻求帮助——这违背了Euler项目的理念。@RoryDaulton请引用并链接Euler项目所说的不应该寻求帮助的地方。@“我用搜索引擎解决了这个问题,这有关系吗?”@•㪞•ׯקן:这是第四部分,在这两部分之间,“如果需要一分钟以上才能解决,这有关系吗?”和“我已经检查了我的程序十次,我一直被告知我的答案是错误的!你犯了错误吗?”?“我想我看到的页面可能与您看到的页面不同。可能是手机造成的。我不是在寻找解决方案。我是在寻求编码帮助。我上面的回答是为了解决OP的问题:如何到达每行的最后一个元素。
public static void main(String args[])  {

    int number[][] = {
            {75},
            {95,64},
            {17,47,82},
            {18,35,87,10},
            {20,04,82,47,65},
            {19,01,23,75,03,34},
            {88,02,77,73,07,63,67},
            {99,65,04,28,06,16,70,92},
            {41,41,26,56,83,40,80,70,33},
            {41,48,72,33,47,32,37,16,94,29},
            {53,71,44,65,25,43,91,52,97,51,14},
            {70,11,33,28,77,73,17,78,39,68,17,57},
            {91,71,52,38,17,14,91,43,58,50,27,29,48},
            {63,66,04,68,89,53,67,30,73,16,69,87,40,31},
            {04,62,98,27,23,9,70,98,73,93,38,53,60,04,23}};

    for(int i = 1 ; i < number.length ; i++ ) 
        for(int j = 0 , k = 0 ; j <= i+1 ; k++,j++) {
        // k is the number of term in previous array
                if(k < number[i-1].length) {
                    
                    // if the first term 
                    if(k == 0) {
                        // if the the k is the only number in the array >(when i = 0)
                        if (number[i-1].length == 1)
                    
                // add it to down value
                            number[i][j] += number[i-1][k];
                        else {
                            //then if we have 2 k add the bigger k to down  value
                            if(number[i-1][k+1]  > number[i-1][k])
                            number[i][j] += number[i-1][k+1];
                            else
                            number[i][j] += number[i-1][k];
                        }
                    }
                    // if k in the mid
                else if( k > 0 && k < number[i-1].length - 1) {
                    //add the bigger value to down term
                    if (number[i-1][k] < number[i-1][k+1] && number[i-1][k] < number[i-1][k-1] )
                        number[i][j] += number[i-1][k];
                    else if( number[i-1][k+1] > number[i-1][k-1] )
                        number[i][j] += number[i-1][k+1];
                    else
                        number[i][j] += number[i-1][k-1];
                }
                else {
                    // if the we reach last k 
                    if(number[i-1][k] > number[i-1][k-1])
                        number[i][j] += number[i-1][k];
                    else
                        number[i][j] += number[i-1][k-1];
                }
        
                }
        }
        
        
    int x = 3;
    for(int i = 0 ; i < number[x].length ; i++ )
    System.out.print(number[x][i] + " ");
    

}