我们有N个硬币需要以三角形的形式排列,即第一行将有1个硬币,第二行将有2个硬币,依此类推,我们需要告诉我们使用这N个硬币可以达到的最大高度。
例子:
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.
通过找到三角形的高度和硬币数量之间的关系可以解决该问题。假设最大高度为H,则硬币的总和应小于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
下面的代码是在上述概念上实现的,
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
输出:
4