>백엔드 개발 >C++ >C++로 작성하여 세 선의 점 집합으로 형성된 삼각형의 수를 구합니다.

C++로 작성하여 세 선의 점 집합으로 형성된 삼각형의 수를 구합니다.

王林
王林앞으로
2023-09-09 09:53:081282검색

C++로 작성하여 세 선의 점 집합으로 형성된 삼각형의 수를 구합니다.

이제 3개의 선에 여러 점이 있습니다. 예를 들어 이 점들이 얼마나 많은 삼각형을 형성할 수 있는지 알아내야 합니다.

Input: m = 3, n = 4, k = 5
Output: 205

Input: m = 2, n = 2, k = 1
Output: 10

이 문제를 해결하기 위해 몇 가지 조합 수학을 적용하고 이를 해결하기 위한 몇 가지 공식을 공식화할 것입니다. 문제.

해결책을 찾는 방법

이 방법에서 우리는 공식을 고안할 것입니다: 현재 상황에 조합론을 적용하면 이 공식이 결과를 제공할 것입니다.

위 방법에 대한 C++ 코드

이것은 주어진 문제를 해결하기 위해 입력으로 사용할 수 있는 C++ 구문입니다. -

Example

#include <bits/stdc++.h>

#define MOD 1000000007

using namespace std;

long long fact(long long n) {
   if(n <= 1)
   return 1;
   return ((n % MOD) * (fact(n-1) % MOD)) % MOD;
}
long long comb(int n, int r) {
   return (((fact(n)) % MOD) / ((fact(r) % MOD) * (fact(n-r) % MOD)) % MOD);
}

int main() {
   int n = 3;
   int m = 4;
   int r = 5;
   long long linen = comb(n, 3); // the combination of n with 3.
   long long linem = comb(m, 3); // the combination of m with 3.
   long long liner = comb(r, 3); //the combination of r with 3.
   long long answer = comb(n + m + r, 3); // all possible comb of n, m , r with 3.
   answer -= (linen + linem + liner);
   cout << answer << "\n";
   return 0;
}

Output

205

위 코드 설명

이 방법에서 우리는 모든 것을 찾습니다. n+m+r과 세 개의 숫자의 가능한 조합, 즉 빗(n+m+r, 3). 이제 여러분은 세 점이 삼각형이 되기 위한 조건이 동일선상에 있을 수 없다는 것을 알고 있으므로 n, m, r의 조합을 합한 다음 이 합을 n+와 결합하여 얻은 가능한 모든 동일선상 점을 뺍니다. 세 숫자 m+r을 변경하면 답을 얻고 이를 인쇄합니다.

결론

이 기사에서는 조합론을 적용하여 세 선의 점 집합에서 몇 개의 삼각형을 만들 수 있는지 계산하는 방법에 대해 설명합니다. 우리는 또한 이 문제를 해결하기 위해 C++ 프로그램과 완전한 방법(일반 방법)을 배웠습니다. C, Java, Python 등과 같은 다른 언어로 동일한 프로그램을 작성할 수 있습니다. 이 기사가 도움이 되기를 바랍니다.

위 내용은 C++로 작성하여 세 선의 점 집합으로 형성된 삼각형의 수를 구합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제