用 C++ 统计满足 a^2 + b^2 = c^2 且 1<=a<=b<=c<= n 的三元组 (a, b, c) 的数量
给定一个整数 n,目标是找到满足以下条件的三元组(3 个数字的集合):−
a2+b2=c2
1<=a<=b<=c<=n
我们将通过运行两个循环来实现这一点,循环变量分别为 1<=a<=n 和 1<=b<=n。相应地计算 c (c=sqrt(a2+b2)),如果满足条件 1 和 2,则递增计数器。
让我们通过示例来理解。
输入 − 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 并返回满足条件 a2+b2=c2 且 1<=a<=b<=c<=n 的三元组的数量。
变量 count 存储此类三元组的数量,初始值为 0。
变量 sum 存储 a 和 b 的平方和。
从 a=1 到 n,b=a 到 n,计算 sum=a*a+b*b 和 c 为 sum 的平方根 (sqrt(sum))。
如果计算出的 c 的值满足 c*c==sum 且 b<=c && c<=n(满足条件 1 和 2)。
将 count 递增,因为当前的 a、b、c 满足这两个条件。
执行此操作直到 a=n 和 b=n。最后,count 将包含满足条件的三元组的数量。
返回 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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
JavaScript
PHP