使用 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

更新於: 2020年8月29日

241 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.