Maximum height when coins are arranged in a triangle

21 Jun, 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
Now by Quadratic formula 
(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
Java
Python3
C#
PHP
Javascript
//  C++ program to find maximum height of arranged// coin triangle#include <bits/stdc++.h>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 coinsint 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 methodint main(){    int N = 12;    cout << findMaximumHeight(N) << endl;    return 0;}
// Java program to find maximum height// of arranged coin triangleclass 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 program to find# maximum height of arranged# coin triangle # Returns the square root of n.# Note that the functiondef 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 coinsdef 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 methodN = 12print(findMaximumHeight(N)) # This code is contributed by# Smitha Dinesh Semwal
// C# program to find maximum height// of arranged coin triangleusing 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// PHP program to find maximum height// of arranged coin triangle  /* Returns the square root of n. Notethat the function */function squareRoot( $n){    /* We are using n itself as initial    approximation This can definitely    be improved */    $x = $n;    $y = 1;     /* e decides the accuracy level*/    $e = 0.000001;    while ($x - $y > $e)    {        $x = ($x + $y) / 2;        $y = $n/$x;    }    return $x;} // Method to find maximum height of// arrangement of coinsfunction 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.?>
<script>    // Javascript program to find maximum height// of arranged coin triangle      /* Returns the square root of n.    Note that the function */    function squareRoot(n)    {                   /* We are using n itself as        initial approximation.This        can definitely be improved */        let x = n;        let y = 1;                   // e decides the accuracy level        let e = 0.000001;        while (x - y > 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        let n = 1 + 8*N;        let maxH = (-1 + squareRoot(n)) / 2;                   return Math.round(maxH);    } // Driver Codelet N = 12;document.write(findMaximumHeight(N));   // This code is contributed by avijitmondal1998.</script>
Output:  
4
Time complexity: O(sqrt(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.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
vt_m
avijitmondal1998
shaheeneallamaiqbal
mailaruyashaswi
triangle
Geometric
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Rotation of a point about another point in C++
Maximum Manhattan distance between a distinct pair from N coordinates
C++ Program to Illustrate Trigonometric functions
Total area of two overlapping rectangles
Largest area possible after removal of a series of horizontal & vertical bars
Program to find line passing through 2 Points
Count ways to partition a string such that both parts have equal distinct characters
Orientation of 3 ordered points
Maximum distance between two points in coordinate plane using Rotating Caliper's Method
Equation of circle when three points on the circle are given