使用 C++ 查找三条线上的一组点形成的三角形数量


假设我们有三条线上的一些点;我们需要找到这些点可以形成多少个三角形,例如

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

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

我们将对这个问题应用一些组合数学,并制定一些公式来解决这个问题。

寻找解决方案的方法

在这种方法中,我们将通过将组合数学应用于当前情况来设计一个公式,并且这个公式将给我们提供结果。

上述方法的 C++ 代码

以下是我们可以用作输入来解决给定问题的 C++ 语法 -

示例

#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;
}

输出

205

以上代码的解释

在这种方法中,我们找到 n+m+r 与 3 的所有可能的组合,即 comb(n+m+r, 3)。现在,如你所知,3 个点构成三角形的条件是它们不应共线,因此我们找到所有可能的共线点,这些点是 n、m、r 与 3 的组合之和,当我们将这个和与 n+m+r 与 3 的组合数相减时,我们得到答案,并打印它。

结论

本文讨论了如何通过应用一些组合数学来找到三条线上的一组点可以形成多少个三角形。我们还学习了这个问题的 C++ 程序以及我们用来解决这个问题的完整方法(普通方法)。我们可以用其他语言(如 C、Java、Python 等)编写相同的程序。希望本文对您有所帮助。

更新于:2021 年 11 月 25 日

228 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告