algorithmmathpascals-triangletriangular

How do you find which row and column a number belongs to in Floyd Triangle


How do you find which row and column does a number belongs to in Floyd Triangle? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

For example,

Thank you so much in advance!


Solution

  • Note that n-th row ends with value n*(n+1)/2. So you can make quadratic equation and solve it to get row number for given number k

    n*(n+1)/2 = k
    n^2 + n - 2*k = 0
    D = 1 + 8*k
    n_row = Ceil((-1 + Sqrt(D)) / 2)   //round float value up 
    

    For example, for k=33 you can calculate

       n_row = Ceil((-1 + Sqrt(265)) / 2) = 
               Ceil(7.639) =
               8
    

    Having n_row, find the last number of previous row and position of k in the current row

      n_Column = 33 - n_row * (n_row - 1) / 2 = 
                33 - 28 = 
                5 
    

    Pseudocode for alternative method of row finding:

     sum = 0
     row = 0
     while sum < k do
          row++  
          sum = sum + row