用 C++ 統計可能的三角形數量


給定一個數組,其中包含三角形邊的長度。目標是找到可以使用該陣列中的任意三條邊構成的可能的三角形數量。

我們將透過檢查任意兩條邊的和是否始終大於第三條邊來實現此目標。如果是,則這三條邊可以構成一個三角形。增加可以構成的可能三角形的數量。

讓我們透過例子來理解。

輸入 − arr[]= {1,2,4,5}

輸出 − 可能三角形的數量 − 1

解釋 − 只有邊 (2,4,5) 可以構成三角形,因為 2+4>5 & 4+5>2 & 2+5>4

輸入 − arr[]= {4,5,6,3,2}

輸出 − 可能三角形的數量 − 7

解釋 − 邊 (4,5,6), (4,5,2),(4,5,3),(4,3,2),(5,6,3),(5,6,2) 可以構成三角形。

下面程式中使用的演算法如下

  • 我們使用一個整數陣列 arr[],並用隨機正數初始化。

  • 函式 countTriangles(int arr[], int n) 接受陣列及其長度,並返回可以構成的可能三角形的數量。

  • 將三角形的初始數量設為 0。

  • 使用三個 for 迴圈來表示三條邊。

  • 最外層迴圈 0<=i

  • 對於邊 arr[i],arr[j],arr[k],檢查它們是否構成三角形的邊。

  • 檢查 arr[i] + arr[j] > arr[k] && arr[i] + arr[k] > arr[j] && arr[k] + arr[j] > arr[i],如果為真,則遞增計數。

  • 返回計數作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int countTriangles(int arr[], int n){
   // Count of triangles
   int count = 0;
   for (int i = 0; i < n-2; i++){
      for (int j = i + 1; j < n-1; j++){
         for (int k = j + 1; k < n; k++){
            //any two sides have sum > third
            if ( arr[i] + arr[j] > arr[k] && arr[i] + arr[k] > arr[j] && arr[k] + arr[j] > arr[i])
               { count++; }
         }
      }
   }
   return count;
}
int main(){
   int Arr[] = { 1,2,5,3,6,8,10 };
   int len = sizeof(Arr) / sizeof(Arr[0]);
   cout << "count of Triangles possible : "<< countTriangles(Arr, len);
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

count of Triangles possible : 8

更新於:2020年8月29日

681 次瀏覽

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.