我们得到一个整数n。目标是找到满足条件的三元组(3个数字一组)-
a 2 + b 2 = c 2
1 <= a <= b <= c <= n
我们将通过为1 <= a <= n和1 <= b <= n的值运行两个循环来做到这一点。如果同时满足条件1和2,则计算c(c = sqrt(a2 + b2))并递增计数。
让我们通过示例来理解。
输入-N = 5
输出-三胞胎数量-1
说明-
for a=3, b=4 and c=5 both conditions are met.
输入-N = 3
输出-三胞胎数量-0
说明-
没有满足条件1和2的三胞胎。
整数N存储范围[1,N]的最后一个限制。
函数countTriplets(int n)取n并返回满足以下条件的三元组的计数:a 2 + b 2 = c 2且1 <= a <= b <= c <= n
可变计数存储此类三元组的数量,最初为0。
变量和存储a和b的平方和。
从a = 1到n和b = a到n,计算sum = a * a + b * b和c作为和的平方根(sqrt(sum))。
如果计算出的c具有这样的值,即c * c == sum和b <= c && c <= n(同时满足条件1和2)。
当电流a,b,c满足两个条件时,增量计数。
执行此操作直到a = n和b = n。最后,count将具有许多满足条件的三元组。
返回计数作为所需结果。
#include <bits/stdc++.h> using namespace std; int countTriplets(int n){ int count = 0; int a,b,c; a=b=c=1; int sum=0; for (a = 1; a <= n; a++) //1<=a<=n{ for (b = a; b <= n; b++) //1<=a<=b<=n{ sum = a*a + b*b; //a^2 + b^2 =c^2 c = sqrt(sum); if (c * c == sum && b<=c && c<=n) //check 1<=a<=b<=c<=n{ count++; cout<<endl<<"a :"<<a<<" b :"<<b<<" c :"<<c; //to print triplets } } } return count; } int main(){ int N = 15; cout <<endl<< "Number of triplets : "<<countTriplets(N); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Number of triplets : a :3 b :4 c :5 a :5 b :12 c :13 a :6 b :8 c :10 a :9 b :12 c :154 Number of triplets : 4