C#Codewars" Pyramid Slide Down"挑战

时间:2017-11-01 19:40:39

标签: c# arrays multidimensional-array

鉴于" Jagged Array" (这是一个元素是其他数组的数组),循环遍历每个数组,返回最高值的数字路径之和。从数字中,您只能添加直接在其下方分支的两个数字中的一个。

这是一个展示规则的简单示例......

   1
  3 1
 1 2 9

这个金字塔有四条路径可以产生四种不同的总和......

  

路径1:(1 + 3 + 1)= 5

     

路径2:(1 + 3 + 2)= 6

     

路径3:(1 + 1 + 2)= 4

     

路径4:(1 + 1 + 9)= 11

在这种情况下,我的函数返回的答案应为11。金字塔总是至少2层楼。

这是另一个视觉效果显示路径应该如何工作的例子......

   /3/
  \7\ 4 
 2 \4\ 6 
8 5 \9\ 3

这个金字塔的回报应该是23.

我被告知你可以用近三行来做这件事。我从来没有使用过这种类型的数组,因为我是c#的新手。 (我也被暗示使用"递归"。不太确定。谢谢!

编辑:这是我的代码......不知道我是否正确行事。

    static void Main(string[] args)
    {
        int sum = 0;
        int[][] testArray =
        {
            //arrays themselves are i
            new int[]         {1}, //elements are j
            new int[]       {2, 1},
            new int[]     {3, 78, 7},
            new int[]   {1, 0, 2, 4},
            new int[]  {1, 2, 3, 4, 5},
            new int[] {4, 5, 6, 7, 8, 9}
        };

        for (int i = 0; i < testArray.Length; i++)
        {
            for (int j = 0; j < testArray[i].Length; j++)
            {
                if (j > testArray[i][j])
                {
                    sum += testArray[i][j];
                    Console.WriteLine(sum);
                }
            }
        }

如果我能让逻辑在主

中工作,我会把它变成一种方法

1 个答案:

答案 0 :(得分:1)

在开发一个令人困惑的算法时,通常最好尝试将其分解成更小,更容易理解的部分。

对于您的示例,一小部分可以确定仅在其中一个级别上使用的数字。通过这种方式,您不必尝试将整个事情放在脑海中,并且实际上可以一次解决一部分问题。

如果您获得了一系列数字,您将如何确定要汇总的数字?您需要知道选择的先前索引(要传递的参数)。

有了这么小的一点,我可以编写一些代码,因为它不是非常复杂。

private int GetNextNumber(List<int> numbers, int prevIndex)
{
    var first = numbers[prevIndex];
    var second = numbers[prevIndex + 1];
    if (first > second)
        return first;
    else
        return second;
}

这不是您需要编写的所有程序(它也不一定是您需要编写的程序),但它是您应该如何处理问题的一个示例。