📌  相关文章
📜  方程x1 + x2 +…的积分解的数量。 + xN = k

📅  最后修改于: 2021-04-29 06:26:37             🧑  作者: Mango

给定N和K。任务是计算具有N变量的线性方程的积分解的数量,如下所示:

例子

Input: N = 3, K = 3
Output: 10

Input: N = 2, K = 2
Output: 3

方法:可以使用置换和组合的概念解决此问题。下面是分别找到非负和正整数解的直接公式。

下面是上述方法的实现:

c++
// C++ program for above implementation
#include
 
using namespace std ;
 
int nCr(int n, int r)
{
    int fac[100] = {1} ;
     
    for (int i = 1 ; i < n + 1 ; i++)
    {
        fac[i] = fac[i - 1] * i ;
    }
     
    int ans = fac[n] / (fac[n - r] *
                        fac[r]) ;
    return ans ;
}
 
// Driver Code
int main()
{
    int n = 3 ;
    int k = 3 ;
     
    int ans = nCr(n + k - 1 , k) +
              nCr(k - 1, n - 1);
     
    cout << ans ;
     
    return 0 ;
}
 
// This code is contributed
// by ANKITRAI1


Java
// Java program for above implementation
import java.io.*;
 
class GFG
{
static int nCr(int n, int r)
{
    int fac[] = new int[100] ;
    for(int i = 0; i < n; i++)
    fac[i] = 1;
     
    for (int i = 1 ; i < n + 1 ; i++)
    {
        fac[i] = fac[i - 1] * i ;
    }
     
    int ans = fac[n] / (fac[n - r] *
                        fac[r]);
    return ans ;
}
 
// Driver Code
public static void main (String[] args)
{
    int n = 3 ;
    int k = 3 ;
     
    int ans = nCr(n + k - 1 , k) +
              nCr(k - 1, n - 1);
     
    System.out.println(ans) ;
}
}
 
// This code is contributed
// by anuj_67


Python3
# Python implementation of
# above approach
 
# Calculate nCr i.e binomial
# cofficent nCr = n !/(r !*(n-r)!)
def nCr(n, r):
 
    # first find factorial
    # upto n
    fac = list()
    fac.append(1)
    for i in range(1, n + 1):
        fac.append(fac[i - 1] * i)
 
    # use nCr formula
    ans = fac[n] / (fac[n - r] * fac[r])
    return ans
 
# n = number of variables
n = 3
 
# sum of n variables = k
k = 3
 
# find number of solutions
ans = nCr(n + k - 1, k) + nCr(k - 1, n - 1)
 
print(ans)
 
# This code is contributed
# by ChitraNayal


C#
// C# program for above implementation
using System;
 
class GFG
{
static int nCr(int n, int r)
{
    int[] fac = new int[100] ;
    for(int i = 0; i < n; i++)
    fac[i] = 1;
     
    for (int i = 1 ; i < n + 1 ; i++)
    {
        fac[i] = fac[i - 1] * i ;
    }
     
    int ans = fac[n] / (fac[n - r] *
                        fac[r]);
    return ans ;
}
 
// Driver Code
public static void Main ()
{
    int n = 3 ;
    int k = 3 ;
     
    int ans = nCr(n + k - 1 , k) +
              nCr(k - 1, n - 1);
     
    Console.Write(ans) ;
}
}
 
// This code is contributed
// by ChitraNayal


PHP


Javascript


输出:
11.0

以上概念的应用:

  1. 方程x1 + x2 +…+ xn = k的非负积分解的数量等于将k个相同的球分配到N个唯一盒子中的方式的数量。
  2. 等式x1 + x2 +…+ xn = k的正整数解的数量等于将k个相同的球分配到N个唯一的盒子中的方式的数量,这样每个盒子必须至少包含1个球。