使用 C++ 統計給定周長下所有可能直角三角形的數量
給定三角形的周長 P。周長是三角形所有邊的和。目標是找到可以構成相同周長的直角三角形的數量。
如果三角形的邊為 a、b 和 c。則 a + b + c = P 且 a2 + b2 = c2(對於 a、b 和 c 的任何組合,勾股定理都適用)
我們將透過將 a 從 1 取到 p/2,將 b 從 a+1 取到 p/3 來檢查這一點。然後 c = p-a-b (a+b+c=p)
對於所有直角三角形,應用勾股定理。a、b 和 c 的值也應滿足構成三角形的條件,其中任意兩邊的和始終大於第三邊。
讓我們透過示例來理解。
輸入 - 周長 P=12
輸出 - 直角三角形的總數 - 1
解釋 -
滿足 a+b+c=P 和 a2 + b2 = c2(以及任意兩邊之和 > 第三邊)的 a、b 和 c 的唯一值為 4、3 和 5。
4+3+5=12,3*3+4*4=5*5 ( 9+16=25 ) 以及 3+4>5,4+5>3,3+5>4
輸入 - 周長 P=10
輸出 - 直角三角形的總數 - 0
解釋 -
沒有 a、b 和 c 的值可以滿足 a+b+c=P 和 a2 + b2 = c2
下面程式中使用的方案如下
我們使用一個整型變數 perimeter 來儲存給定周長的值。
函式 rightTriangles(int p) 以周長作為輸入,並返回所有可能的直角三角形的總數。
變數 count 儲存可能的直角三角形的數量,初始值為 0。
使用 for 迴圈,從 a=1 開始到 p/2
再次使用巢狀的 for 迴圈,從 b=a+1 開始到 p/3(直角三角形中的兩條邊永遠不相等)
計算 c=p-a-b。對於此 a、b、c 檢查 (a+b>c && b+c>a && a+c>b)。
還要檢查勾股定理,其中 a*a+b*b==c*c。如果為真,則遞增 count。
最後返回 count,其中包含給定周長下所有可能的直角三角形的數量。
返回 count 作為期望的結果。
注意 - 我們將僅對 a、b 和 c 的一種組合檢查勾股定理,以獲得唯一的結果。
示例
#include <bits/stdc++.h>
using namespace std;
int rightTriangles(int p){
int count = 0;
int c=0;
for( int a=1;a<p/2;a++){
for(int b=1;b<p/3;b++){
c=p-a-b;
if( a+b>c && b+c>a && a+c>b) //condition for triangle{
if( (a*a+b*b)==c*c ) //pythagoras rule for right triangles
{ ++count; }
}
}
}
return count;
}
int main(){
int perimeter= 12;
cout << "Total number of right triangles that can be formed: "<<rightTriangles(perimeter);
return 0;
}輸出
如果我們執行以上程式碼,它將生成以下輸出 -
Total number of right triangles that can be formed: 1
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP