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: 3
Explanation:
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 = 2
Output: 7
Explanation:
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++ program for the above approach #include <iostream> using namespace std;
// Function to find the number of // equilateral triangle formed // within another triangle 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 Code int 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 approach import java.util.*;
class GFG{
// Function to find the number of // equilateral triangle formed // within another triangle static 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 Code public 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 triangle def 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 Code if __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 approach using System;
class GFG{
// Function to find the number of // equilateral triangle formed // within another triangle static 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 Code public 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 triangle function 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)