使用 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.