title: Triangle problem
body: <p>I am trying to resolve Euler Problem 18 -> <a href="http://projecteuler.net/index.php?section=problems&amp;id=18" rel="nofollow noreferrer">http://projecteuler.net/index.php?section=problems&amp;id=18</a></p>
  
  <p>I am trying to do this with c++ (I am relearning it and euler problems make for good learning/searching material)</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  using namespace std;
  
  long long unsigned countNums(short,short,short array[][15],short,bool,bool);
  
  int main(int argc,char **argv) {
  
      long long unsigned max = 0;
      long long unsigned sum;
  
  
      short piramide[][15] = {{75,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                              {95,64,0,0,0,0,0,0,0,0,0,0,0,0,0},
                              {17,47,82,0,0,0,0,0,0,0,0,0,0,0,0},
                              {18,35,87,10,0,0,0,0,0,0,0,0,0,0,0},
                              {20,4,82,47,65,0,0,0,0,0,0,0,0,0,0},
                              {19,1,23,75,3,34,0,0,0,0,0,0,0,0,0},
                              {88,2,77,73,7,63,67,0,0,0,0,0,0,0,0},
                              {99,65,4 ,28,6,16,70,92,0,0,0,0,0,0,0},
                              {41,41,26,56,83,40,80,70,33,0,0,0,0,0,0},
                              {41,48,72,33,47,32,37,16,94,29,0,0,0,0,0},
                              {53,71,44,65,25,43,91,52,97,51,14,0,0,0,0},
                              {70,11,33,28,77,73,17,78,39,68,17,57,0,0,0},
                              {91,71,52,38,17,14,91,43,58,50,27,29,48,0,0},
                              {63,66,4,68,89,53,67,30,73,16,69,87,40,31,0},
                              {4,62,98,27,23,9,70,98,73,93,38,53,60,4,23}};
  
      for (short i = 0;i&lt;15;i++) {
          for (short m=0;m&lt;15;m++) {
              if (piramide[i][m] == 0)
                  break;
              sum = countNums(i,m,piramide,15,true,true);
              if (sum &gt; max)
                  max = sum;
              sum = countNums(i,m,piramide,15,true,false);
              if (sum &gt; max)
                  max = sum;
              sum = countNums(i,m,piramide,15,false,true);
              if (sum &gt; max)
                  max = sum;
              sum = countNums(i,m,piramide,15,false,false);
              if (sum &gt; max)
                 max = sum;
  
          }
  
      }
      cout &lt;&lt; max;
      return 0;
  }
  
  
  long long unsigned countNums(short start_x,short start_y,short array[][15],short size, bool goright,bool goright2) {
      long long unsigned currentSum;
  
      currentSum = array[start_x][start_y];
  
      if (goright) { //go right
          if ((start_x + 1) &lt; size)
              start_x++;
          if ((start_y + 1) &lt; size)
              start_y++;
      }
      else //go down
          if ((start_x + 1) &lt; size)
              start_x++;
  
      if (goright2) { //still going right
          for (short i = start_x, m = start_y;i&lt; size &amp;&amp; m &lt; size;i++,m++) {
              currentSum += array[i][m];         
          }
      }
      else { //still going down
          for (short i = start_x;i&lt;size;i++) {
              currentSum += array[i][start_y];            
          }
      }
  
      return currentSum;
  }
  </code></pre>
  
  <p>The countNums function is used to go either down or diagonally. 
  I have tested this function like so:</p>
  
  <pre><code>short a = 0;
  short b = 0;
  cout &lt;&lt; countNums(a,b,piramide,15,true,true) &lt;&lt; endl;
  cout &lt;&lt; countNums(a,b,piramide,15,true,false) &lt;&lt; endl;
  cout &lt;&lt; countNums(a,b,piramide,15,false,true) &lt;&lt; endl;
  cout &lt;&lt; countNums(a,b,piramide,15,false,false) &lt;&lt; endl;
  return 0;
  </code></pre>
  
  <p>And it does work (I also changed the function a little so it would print every number it was going through) </p>
  
  <p>But I still don't get the right result. This goes down and to the right and still goes right (adjacent numbers to the right), goes down and keeps going down (adjacent number to the left).
  What am I doing wrong here, anyone?</p>
  
  <hr>
  
  <p>Alastair: It's simple</p>
  
  <p>long long unsigned countNums(short start_x,short start_y,short array[][15],short size, bool goright,bool goright2);</p>
  
  <p>start_x and start_y are the coords of the array
  array is the reference to the array
  size is just the size of the array (it's always 15)
  goright is to know if I am going to go down and right or just down
  goright2 is to know if I am going to continue to go down or going left</p>