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