用 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
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP