Número máximo de cuadrados que pueden caber en un triángulo isósceles de ángulo recto

Te dan un triángulo isósceles (un triángulo con al menos dos lados iguales) de ángulo recto con base b, necesitamos encontrar el número máximo de cuadrados de lado m, que se pueden ajustar en el triángulo dado.
Ejemplos: 
 

Input : b = 6, m = 2
Output : 3

Input : b = 4, m = 1
Output : 6

Consideremos un triángulo rectángulo XYZ, donde YZ es la base del triángulo. Suponga que la longitud de la base es b. Si consideramos la posición del primer cuadrado con el vértice Y, tendremos (b/m-1) cuadrados en la base, y nos quedará otro triángulo rectángulo isósceles con longitud de base (b – m).
Ilustración : 
 

Maximum number of squares that can fit in a right angle isosceles triangle

Sea f(b, m) = Número de cuadrados que se pueden encajar en un triángulo con base de longitud b. 
entonces f(b, m) = (b / m – 1) + f(b – m, m) 
Podemos calcular f(b) usando la recursividad anterior, y con el uso de memorización. Más tarde podemos responder cada consulta en tiempo O(1). Podemos hacerlo para números pares e impares por separado con el caso base si (b < 2 * m) f(b, m) = 0.
La recursividad dada se puede resolver como:
f(b, m) = b / m – 1 + f(b – m, m) = b / m – 1 + (b – m) / m – 1 + f(b – 2m, m) 
f(b, m) = b / m – 1 + b / m – 2 + f(b – 3m, m) +…+ f(b – (b / m)m, m) 
f(b) = b / m – 1 + b / m – 2 + b / m – 3 +…..+ 1 + 0 
Con condiciones, si (b < 2 * m) f(b, m) = 0 
f(b) = suma de los primeros (b/m – 1) números naturales 
= (b/m – 1) * (b/m)/2 
Esta fórmula se puede utilizar para reducir la complejidad del tiempo hasta O(1).
 

C++

// CPP program for finding maximum squares
// that can fit in right angle isosceles
// triangle
#include<bits/stdc++.h>
using namespace std;
 
// function for finding max squares
int maxSquare(int b, int m)
{
    // return in O(1) with derived
    // formula
    return (b / m - 1) * (b / m) / 2;
}
 
// driver program
int main()
{
    int b = 10, m = 2;
    cout << maxSquare (b,m);
    return 0;
}

Java

// Java program for finding maximum squares
// that can fit in right angle isosceles
// triangle
public class GFG
{    
    // function for finding max squares
    static int maxSquare(int b, int m)
    {
        // return in O(1) with derived
        // formula
        return (b / m - 1) * (b / m) / 2;
    }
      
    // driver program
    public static void main(String args[])
    {
        int b = 10, m = 2;
        System.out.println(maxSquare (b,m));
    }
}
 
// This code is contribute by Sumit Ghosh

Python3

# Python3 program for
# finding maximum squares
# that can fit in
# right angle isosceles
# triangle
 
# function for finding max squares
def maxSquare(b, m):
  
    # return in O(1) with derived
    # formula
    return (b / m - 1) * (b / m) / 2
  
 
# driver program
b = 10
m = 2
print(int(maxSquare (b,m)))
 
# This code is contributed by
# Smitha Dinesh Semwal

C#

// C# program for finding maximum squares
// that can fit in right angle isosceles
// triangle
using System;
 
public class GFG
{
    // function for finding max squares
    static int maxSquare(int b, int m)
    {
        // return in O(1) with derived
        // formula
        return (b / m - 1) * (b / m) / 2;
    }
     
    // driver program
    public static void Main()
    {
        int b = 10, m = 2;
        Console.WriteLine(maxSquare (b, m));
    }
}
 
// This code is contribute by vt_m

PHP

<?php
// PHP program for finding
// maximum squares that can
// fit in right angle isosceles
// triangle
 
// function for finding
// max squares
function maxSquare($b, $m)
{
     
    // return in O(1) with 
    // derived formula
    return ($b / $m - 1) *
           ($b / $m) / 2;
}
 
    // Driver Code
    $b = 10; $m = 2;
    echo maxSquare($b,$m);
// This code is contribute by vt_m
?>

Javascript

<script>
 
// Javascript program for finding maximum squares
// that can fit in right angle isosceles
// triangle
 
// function for finding max squares
function maxSquare(b, m)
{
 
    // return in O(1) with derived
    // formula
    return (b / m - 1) * (b / m) / 2; a
}
 
// Driver program
  
    let b = 10, m = 2;
    document.write(maxSquare (b,m));
     
// This code is contributed by Mayank Tyagi
</script>

Producción: 
 

10

Complejidad del tiempo: O(1)

Espacio auxiliar: O(1)
Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *