使用 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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告