用 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
广告