📜  当n条水平平行线与m条垂直平行线相交时的平行四边形数

📅  最后修改于: 2021-04-26 09:53:58             🧑  作者: Mango

给定两个正整数nm 。任务是计算n条水平平行线与m条垂直平行线相交时可以形成任何尺寸的平行四边形的数量。

例子:

Input : n = 3, m = 2
Output : 3
2 parallelograms of size 1x1 and 1 parallelogram 
of size 2x1.

Input : n = 5, m = 5
Output : 100

这个想法是使用Combination ,其中n C r给出了从给定n个项目中选择k个项目的状态,方式数量。
要形成平行四边形,我们需要两条水平平行线和两条垂直平行线。因此,选择两条水平平行线的方式为n C 2 ,选择两条垂直平行线的方式为m C 2 。因此,可能的平行四边形总数为n C 2 x m C 2

以下是此方法的C++实现:

C++
// CPP Program to find number of parallelogram when 
// n horizontal parallel lines intersect m vertical 
// parallel lines.
#include
#define MAX 10
using namespace std;
  
// Find value of Binomial Coefficient
int binomialCoeff(int C[][MAX], int n, int k)
{ 
    // Calculate value of Binomial Coefficient
    // in bottom up manner
    for (int i = 0; i <= n; i++)
    {
        for (int j = 0; j <= min(i, k); j++)
        {
            // Base Cases
            if (j == 0 || j == i)
                C[i][j] = 1;
   
            // Calculate value using previously
            // stored values
            else
                C[i][j] = C[i-1][j-1] + C[i-1][j];
        }
    }
}
  
// Return number of parallelogram when n horizontal
// parallel lines intersect m vertical parallel lines.
int countParallelogram(int n, int m)
{
    int  C[MAX][MAX] = { 0 };    
    binomialCoeff(C, max(n, m), 2);    
    return C[n][2] * C[m][2];
}
  
// Driver Program
int main()
{
    int n = 5, m = 5;    
    cout << countParallelogram(n, m) << endl;
    return 0;
}


Java
// Java Program to find number of parallelogram when 
// n horizontal parallel lines intersect m vertical 
// parallel lines.
class GFG
{
    static final int MAX = 10;
      
    // Find value of Binomial Coefficient
    static void binomialCoeff(int C[][], int n, int k)
    { 
        // Calculate value of Binomial Coefficient
        // in bottom up manner
        for (int i = 0; i <= n; i++)
        {
            for (int j = 0; j <= Math.min(i, k); j++)
            {
                // Base Cases
                if (j == 0 || j == i)
                    C[i][j] = 1;
      
                // Calculate value using previously
                // stored values
                else
                    C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
            }
        }
    }
      
    // Return number of parallelogram when n horizontal
    // parallel lines intersect m vertical parallel lines.
    static int countParallelogram(int n, int m)
    {
        int C[][]=new int[MAX][MAX]; 
          
        binomialCoeff(C, Math.max(n, m), 2); 
          
        return C[n][2] * C[m][2];
    }
      
    // Driver code
    public static void main(String arg[]) 
    {
        int n = 5, m = 5; 
        System.out.println(countParallelogram(n, m));
    }
}
  
// This code is contributed By Anant Agarwal.


Python3
# Python Program to find number of parallelogram when
# n horizontal parallel lines intersect m vertical
# parallel lines.
MAX = 10;
  
# Find value of Binomial Coefficient
def binomialCoeff(C, n, k):
      
    # Calculate value of Binomial Coefficient
    # in bottom up manner
    for i in range(n + 1):
        for j in range(0, min(i, k) + 1):
          
            # Base Cases
            if (j == 0 or j == i):
                C[i][j] = 1;
  
            # Calculate value using previously
            # stored values
            else:
                C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
  
# Return number of parallelogram when n horizontal
# parallel lines intersect m vertical parallel lines.
def countParallelogram(n, m):
    C = [[0 for i in range(MAX)] for j in range(MAX)]
  
    binomialCoeff(C, max(n, m), 2);
  
    return C[n][2] * C[m][2];
  
# Driver code
if __name__ == '__main__':
    n = 5;
    m = 5;
    print(countParallelogram(n, m));
  
# This code is contributed by 29AjayKumar


C#
// C# Program to find number of parallelogram when 
// n horizontal parallel lines intersect m vertical 
// parallel lines.
using System;
  
class GFG
{
    static int MAX = 10;
      
    // Find value of Binomial Coefficient
    static void binomialCoeff(int [,]C, int n, int k)
    { 
        // Calculate value of Binomial Coefficient
        // in bottom up manner
        for (int i = 0; i <= n; i++)
        {
            for (int j = 0; j <= Math.Min(i, k); j++)
            {
                // Base Cases
                if (j == 0 || j == i)
                    C[i, j] = 1;
      
                // Calculate value using previously
                // stored values
                else
                    C[i, j] = C[i - 1, j - 1] + C[i - 1, j];
            }
        }
    }
      
    // Return number of parallelogram when n horizontal
    // parallel lines intersect m vertical parallel lines.
    static int countParallelogram(int n, int m)
    {
        int [,]C = new int[MAX, MAX]; 
          
        binomialCoeff(C, Math.Max(n, m), 2); 
          
        return C[n, 2] * C[m, 2];
    }
      
    // Driver code
    public static void Main() 
    {
        int n = 5, m = 5; 
        Console.WriteLine(countParallelogram(n, m));
    }
}
  
// This code is contributed By vt_m.


输出:

100