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