Maximum count of Equilateral Triangles that can be formed within given Equilateral Triangle - GeeksforGeeks

23 Mar, 2021
Given two integers N and K where N denotes the unit size of a bigger Equilateral Triangle, the task is to find the number of an equilateral triangle of size K that are present in the bigger triangle of side N.
Examples:
Input: N = 4, K = 3
Output: 3Explanation:There are 3 equilateral triangles of 3 unit size which are present in the Bigger equilateral triangle of size 4 units.
Input: N = 4, K = 2Output: 7Explanation:There are 7 equilateral triangles of 2 unit size which are present in the Bigger equilateral triangle of size 4 units. 
Naive Approach: The idea is to iterate over all possible sizes of the bigger equilateral triangle for checking the number of triangles with the required size K and print the total count of triangles.
Time Complexity: O(N)Auxiliary Space: O(1)
Efficient Approach: To optimize the above approach, observe the following points:
The number of triangles with a peak in the upward direction of size K present in size N equals to ((N – K +1 ) * (N – K + 2))/2.
The number of inverted triangles with a peak in the downward direction of size K present in size N equals to ((N – 2K + 1) * (N – 2K + 2))/2.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program for the above approach#include <iostream>using namespace std; // Function to find the number of// equilateral triangle formed// within another triangleint No_of_Triangle(int N, int K){    // Check for the valid condition    if (N < K)        return -1;     else {         int Tri_up = 0;         // Number of triangles having        // upward peak        Tri_up = ((N - K + 1)                  * (N - K + 2))                 / 2;         int Tri_down = 0;         // Number of inverted triangles        Tri_down = ((N - 2 * K + 1)                    * (N - 2 * K + 2))                   / 2;         // Total no. of K sized triangle        return Tri_up + Tri_down;    }} // Driver Codeint main(){    // Given N and K    int N = 4, K = 2;     // Function Call    cout << No_of_Triangle(N, K);    return 0;}
// Java program for the above approachimport java.util.*;class GFG{ // Function to find the number of// equilateral triangle formed// within another trianglestatic int No_of_Triangle(int N, int K){    // Check for the valid condition    if (N < K)        return -1;     else    {        int Tri_up = 0;         // Number of triangles having        // upward peak        Tri_up = ((N - K + 1) * (N - K + 2)) / 2;         int Tri_down = 0;         // Number of inverted triangles        Tri_down = ((N - 2 * K + 1) *                    (N - 2 * K + 2)) / 2;         // Total no. of K sized triangle        return Tri_up + Tri_down;    }} // Driver Codepublic static void main(String[] args){    // Given N and K    int N = 4, K = 2;     // Function Call    System.out.print(No_of_Triangle(N, K));}} // This code is contributed by PrinciRaj1992
# Python3 program for the above approach # Function to find the number of# equilateral triangle formed# within another triangledef No_of_Triangle(N, K):       # Check for the valid condition    if (N < K):        return -1;     else:        Tri_up = 0;         # Number of triangles having        # upward peak        Tri_up = ((N - K + 1) *                  (N - K + 2)) // 2;         Tri_down = 0;         # Number of inverted triangles        Tri_down = ((N - 2 * K + 1) *                    (N - 2 * K + 2)) // 2;         # Total no. of K sized triangle        return Tri_up + Tri_down;     # Driver Codeif __name__ == '__main__':    # Given N and K    N = 4; K = 2;     # Function Call    print(No_of_Triangle(N, K)); # This code is contributed by sapnasingh4991
// C# program for the above approachusing System;class GFG{ // Function to find the number of// equilateral triangle formed// within another trianglestatic int No_of_Triangle(int N, int K){    // Check for the valid condition    if (N < K)        return -1;     else    {        int Tri_up = 0;         // Number of triangles having        // upward peak        Tri_up = ((N - K + 1) * (N - K + 2)) / 2;         int Tri_down = 0;         // Number of inverted triangles        Tri_down = ((N - 2 * K + 1) *                    (N - 2 * K + 2)) / 2;         // Total no. of K sized triangle        return Tri_up + Tri_down;    }} // Driver Codepublic static void Main(String[] args){    // Given N and K    int N = 4, K = 2;     // Function Call    Console.Write(No_of_Triangle(N, K));}} // This code is contributed by Rajput-Ji
<script> // JavaScript program for the above approach // Function to find the number of// equilateral triangle formed// within another trianglefunction No_of_Triangle(N, K){    // Check for the valid condition    if (N < K)        return -1;     else {         let Tri_up = 0;         // Number of triangles having        // upward peak        Tri_up = Math.floor(((N - K + 1)                * (N - K + 2))                / 2);         let Tri_down = 0;         // Number of inverted triangles        Tri_down = Math.floor(((N - 2 * K + 1)                    * (N - 2 * K + 2))                / 2);         // Total no. of K sized triangle        return Tri_up + Tri_down;    }} // Driver Code     // Given N and K    let N = 4, K = 2;     // Function Call    document.write(No_of_Triangle(N, K));  // This code is contributed by Surbhi Tyagi. </script>
7
 
Time Complexity: O(1)Auxiliary Space: O(1)
princiraj1992
Rajput-Ji
sapnasingh4991
surbhityagi15
triangle
Geometric
Greedy
Mathematical
Greedy
Mathematical
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for distance between two points on earth
Convex Hull | Set 1 (Jarvis's Algorithm or Wrapping)
Line Clipping | Set 1 (Cohen–Sutherland Algorithm)
Convex Hull | Set 2 (Graham Scan)
Check whether a given point lies inside a triangle or not
Dijkstra's shortest path algorithm | Greedy Algo-7
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
Program for array rotation
Write a program to print all permutations of a given string