Разделите равнобедренный треугольник на две части с соотношением площадей n: m.

Опубликовано: 15 Января, 2022

Учитывая высоту равнобедренного треугольника и два целых числа , . Задача - найти высоту от вершины треугольника так, что если мы сделаем разрез на высоте h сверху параллельно основанию, то треугольник нужно разделить на две части с соотношением их площадей, равным n: m .
Примеры :

 Ввод: H = 4, n = 1, m = 1
Выход: 2,82843

Ввод: H = 4, n = 1, m = 0
Выход: 4

Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.

Прежде всего, прежде чем продолжить, упомянем некоторые из основных свойств равнобедренного треугольника.
Пусть ▲ ABC - равнобедренный треугольник, причем AB = AC, а BC - неравные сторона и основание треугольника. Если D - середина BC, то AD - это наша высота H. Кроме того, если мы проведем параллельную линию BC, которая разрезает AB и AC в точках E и F соответственно, и G является средней точкой EF, тогда ▲ AEG похож на ▲ ABD, ▲ AFG аналогична ▲ ACD, ▲ AEF аналогична ▲ ABC, и, используя свойства подобных треугольников, мы можем сделать следующие выводы:
AE / AB = AG / AD = EG / BD = EF / BC = AF / AC —– (i)

Согласно требованию задачи, мы должны определить высоту h, такую, чтобы отношение площади ▲ AEF к площади трапеции EFCB = n: m.

Let, h is the height of cut from the top of the triangle. 
Now, area of ▲AEF = 0.5 * AG * EF and area of trapezium EFCB = 0.5 * GD * (EF+BC) 
also, ratio of both is n:m. 
So, we can say that ratio of area of ▲AEF to area of ▲ABC is equal to n :(n+m). 
=> area of ▲AEF / area of ▲ABC = n / (n+m) 
=> (0.5 * AG * EF) / (0.5 * AD * BC) = n / (n+m) 
=> (AG/AD) * (EF/BC) = n / (n+m) 
=> (EF/BC) * (EF/BC) = n / (n+m) 
=> h2 /H2 = n / (n+m) 
=> h = H*sqrt(n/(n+m)) 
 

Below is the implementation of the above approach: 
 

C++

// C++ program, to find height h
// which divide isosceles triangle
// into ratio n:m
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the height
float heightCalculate(int H, int n, int m)
{
    // type cast the n, m into float
    float N = n * 1.0;
    float M = m * 1.0;
    // calculate the height for cut
    float h = H * sqrt(N / (N + M));
    return h;
}
 
// Driver code
int main()
{
    int H = 10, n = 3, m = 4;
    cout << heightCalculate(H, n, m);
    return 0;
}

Java

// Java program, to find height h
// which divide isosceles triangle
// into ratio n:m
 
import java.io.*;
 
class GFG {
 
 
// Function to return the height
static float heightCalculate(int H, int n, int m)
{
    // type cast the n, m into float
    float N = (float)(n * 1.0);
    float M = (float)(m * 1.0);
    // calculate the height for cut
    float h = H *(float) Math.sqrt(N / (N + M));
    return h;
}
 
// Driver code
 
 
    public static void main (String[] args) {
            int H = 10, n = 3, m = 4;
    System.out.print( heightCalculate(H, n, m));
    }
}

Python3

# Python 3 program, to find height
# h which divide isosceles triangle
# into ratio n:m
from math import sqrt
 
# Function to return the height
def heightCalculate(H, n, m):
     
    # type cast the n, m into float
    N = n * 1.0
    M = m * 1.0
     
    # calculate the height for cut
    h = H * sqrt(N / (N + M))
    return h
 
# Driver code
if __name__ == "__main__":
    H = 10
    n = 3
    m = 4
    print("{0:.6}" .
    format(heightCalculate(H, n, m)));
     
# This code is contributed
# by Surendra_Gangwar

C#

// C# program, to find height h
// which divide isosceles triangle
// into ratio n:m
using System;
 
class GFG
{
 
// Function to return the height
static float heightCalculate(int H,
                             int n, int m)
{
    // type cast the n, m into float
    float N = (float)(n * 1.0);
    float M = (float)(m * 1.0);
     
    // calculate the height for cut
    float h = H * (float) Math.Sqrt(N / (N + M));
    return h;
}
 
// Driver code
public static void Main ()
{
    int H = 10, n = 3, m = 4;
    Console.WriteLine(heightCalculate(H, n, m));
}
}
 
// This code is contributed
// by inder_verma

PHP

<?php
// PHP program, to find height h
// which divide isosceles triangle
// into ratio n:m
 
// Function to return the height
function heightCalculate($H, $n, $m)
{
    // type cast the n, m into float
    $N = $n * 1.0;
    $M = $m * 1.0;
     
    // calculate the height for cut
    $h = $H * sqrt($N / ($N + $M));
    return $h;
}
 
// Driver code
$H = 10; $n = 3; $m = 4;
echo heightCalculate($H, $n, $m);
 
// This code is contributed
// by anuj_67
?>

Javascript

<script>
 
// JavaScript program, to find height h
// which divide isosceles triangle
// into ratio n:m
 
// Function to return the height
function heightCalculate(H, n, m)
{
    // type cast the n, m into float
    let N = n * 1.0;
    let M = m * 1.0;
    // calculate the height for cut
    let h = H * Math.sqrt(N / (N + M));
    return h;
}
 
// Driver code
 
    let H = 10, n = 3, m = 4;
    document.write(heightCalculate(H, n, m));
 
 
// This code is contributed by Surbhi Tyagi.
 
</script>
Output: 
6.54654

 

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.

РЕКОМЕНДУЕМЫЕ СТАТЬИ