给定N和K。任务是计算具有N变量的线性方程的积分解的数量,如下所示:
x1 + x2+ x3…+ xN-1+…+xN = K
例子:
Input: N = 3, K = 3
Output: 10
Input: N = 2, K = 2
Output: 3
方法:可以使用置换和组合的概念解决此问题。下面是分别找到非负和正整数解的直接公式。
Number of non-negative integral solutions of equation x1 + x2 + …… + xn = k is given by (n+k-1)! / (n-1)!*k!.
Number of positive integral solutions of equation x1 + x2 + ….. + xn = k is given by (k-1)! / (n-1)! * (k-n)!.
下面是上述方法的实现:
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
以上概念的应用:
- 方程x1 + x2 +…+ xn = k的非负积分解的数量等于将k个相同的球分配到N个唯一盒子中的方式的数量。
- 等式x1 + x2 +…+ xn = k的正整数解的数量等于将k个相同的球分配到N个唯一的盒子中的方式的数量,这样每个盒子必须至少包含1个球。