# Maximum height when coins are arranged in a triangle

• Difficulty Level : Basic
• Last Updated : 18 Sep, 2022

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.

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. ?>

## Javascript



Output:

4

Time complexity: O(log(n))

Auxiliary space: O(1)

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

My Personal Notes arrow_drop_up
Related Articles