두 개의 숫자 n과 k가 주어집니다. 합이 k인 n개의 숫자를 사용하여 구성할 수 있는 배열의 수를 찾아야 합니다.
크기가 N이고 합이 K인 배열의 수는 $\dbinom{k - 1}{n - 1}$입니다.
이것은 합이 k인 n개의 요소를 사용하여 형성할 수 있는 숫자 배열을 찾는 간단한 공식입니다. 예를 들어 보겠습니다.
입력
n = 1 k = 2
출력
1
구성할 수 있는 유일한 배열은 [2]
입니다.입력
n = 2 k = 4
출력
3
구성할 수 있는 배열은 [1, 3], [2, 2], [3, 1]입니다.
알고리즘
- 숫자 n과 k를 초기화합니다.
- 숫자의 계승을 계산하는 함수를 작성하십시오.
- 이제 위와 같이 이항을 계산하는 주요 함수를 작성합니다.
- 답을 반환합니다.
구현
다음은 위의 알고리즘을 C++로 구현한 것입니다.
#include <bits/stdc++.h> using namespace std; int factorial(int n) { int result = 1; for (int i = 2; i <= n; i++) { result *= i; } return result; } int getNumberOfArraysCount(int n, int k) { return factorial(n) / (factorial(k) * factorial(n - k)); } int main() { int N = 5, K = 8; cout << getNumberOfArraysCount(K - 1, N - 1) << endl; return 0; }
출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
35