# Maximum height when coins are arranged in a triangle

We have N coins which need to arrange in form of a triangle, i.e. first row will have 1 coin, second row will have 2 coins and so on, we need to tell maximum height which we can achieve by using these N coins.

Examples:

Input : N = 7
Output : 3
Maximum height will be 3, putting 1, 2 and
then 3 coins. It is not possible to use 1
coin left.

Input : N = 12
Output : 4
Maximum height will be 4, putting 1, 2, 3 and
4 coins, it is not possible to make height as 5,
because that will require 15 coins.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

This problem can be solved by finding a relation between height of the triangle and number of coins. Let maximum height is H, then total sum of coin should be less than N,

Sum of coins for height H <= N
H*(H + 1)/2  <= N
H*H + H – 2*N <= 0
(ignoring negative root)

Maximum H can be (-1 + √(1 + 8N)) / 2

Now we just need to find the square root of (1 + 8N) for
which we can use Babylonian method of finding square root

Below code is implemented on above stated concept,

## CPP

 //  C++ program to find maximum height of arranged // coin triangle #include using namespace std;    /* Returns the square root of n. Note that the function */ float squareRoot(float n) {     /* We are using n itself as initial approximation       This can definitely be improved */     float x = n;     float y = 1;        float e = 0.000001; /* e decides the accuracy level*/     while (x - y > e)     {         x = (x + y) / 2;         y = n/x;     }     return x; }    //  Method to find maximum height of arrangement of coins int findMaximumHeight(int N) {     //  calculating portion inside the square root     int n = 1 + 8*N;     int maxH = (-1 + squareRoot(n)) / 2;     return maxH; }    //  Driver code to test above method int main() {     int N = 12;     cout << findMaximumHeight(N) << endl;     return 0; }

## Java

 // Java program to find maximum height  // of arranged coin triangle class GFG {            /* Returns the square root of n.      Note that the function */     static float squareRoot(float n)     {                    /* We are using n itself as          initial approximation.This          can definitely be improved */         float x = n;         float y = 1;                    // e decides the accuracy level         float e = 0.000001f;          while (x - y > e)         {             x = (x + y) / 2;             y = n / x;         }                    return x;     }            // Method to find maximum height      // of arrangement of coins     static int findMaximumHeight(int N)     {                    // calculating portion inside          // the square root         int n = 1 + 8*N;         int maxH = (int)(-1 + squareRoot(n)) / 2;                    return maxH;     }             // Driver code      public static void main (String[] args)     {         int N = 12;                    System.out.print(findMaximumHeight(N));     } }    // This code is contributed by Anant Agarwal.

## Python3

 # Python3 program to find # maximum height of arranged # coin triangle    # Returns the square root of n. # Note that the function  def squareRoot(n):         # We are using n itself as         # initial approximation     # This can definitely be improved      x = n      y = 1         e = 0.000001  # e decides the accuracy level      while (x - y > e):         x = (x + y) / 2         y = n/x                return x         # Method to find maximum height # of arrangement of coins def findMaximumHeight(N):         # calculating portion inside the square root     n = 1 + 8*N      maxH = (-1 + squareRoot(n)) / 2     return int(maxH)         # Driver code to test above method N = 12  print(findMaximumHeight(N))    # This code is contributed by # Smitha Dinesh Semwal

## C#

 // C# program to find maximum height  // of arranged coin triangle using System;    class GFG {     /* Returns the square root of n.      Note that the function */     static float squareRoot(float n)     {         /* We are using n itself as         initial approximation.This         can definitely be improved */         float x = n;         float y = 1;            // e decides the accuracy level         float e = 0.000001f;         while (x - y > e)         {             x = (x + y) / 2;             y = n / x;         }         return x;     }            static int findMaximumHeight(int N)     {            // calculating portion inside         // the square root         int n = 1 + 8*N;         int maxH = (int)(-1 + squareRoot(n)) / 2;            return maxH;     }        /* program to test above function */     public static void Main()     {         int N = 12;         Console.Write(findMaximumHeight(N));     } }    // This code is contributed by _omg

## PHP

 \$e)     {         \$x = (\$x + \$y) / 2;         \$y = \$n/\$x;     }     return \$x; }    // Method to find maximum height of  // arrangement of coins function findMaximumHeight( \$N) {            // calculating portion inside     // the square root     \$n = 1 + 8 * \$N;     \$maxH = (-1 + squareRoot(\$n)) / 2;     return floor(\$maxH); }    // Driver code to test above method \$N = 12; echo findMaximumHeight(\$N) ;    // This code is contributed by anuj_67. ?>

Output:

4

This article is contributed by Utkarsh Trivedi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Improved By : vt_m

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.