勾股数 【问题描述】 勾股数是很有趣的数学概念。如果三个正整数a、b、c,满足a2+=c2,而且 1≤a≤b≤c,我们就将a、b、c组成的三元组(ab,c)称为勾股数。你能通过编 程,数数有多少组勾股数,能够满足c≤n吗? 【输入描述】 输入一行,包含一个正整数n。约定1≤n≤1000。 【输出描述】 输出一行,包含一个整数c表示有C组满足条件的勾股数。 【样例输入1】 5 【样例输出1】 1 【样例解释1】 满足c≤5的勾股数只有一组,即(3,4,5)。C++实现
时间: 2024-02-27 19:54:36 浏览: 152
以下是C++实现的代码:
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int cnt = 0; // 统计勾股数的数量
for (int c = 1; c <= n; ++c) {
for (int b = 1; b <= c; ++b) {
for (int a = 1; a <= b; ++a) {
if (a*a + b*b == c*c) {
++cnt;
}
}
}
}
cout << cnt << endl;
return 0;
}
```
该程序首先通过 `cin` 函数获取用户输入的正整数 `n`。然后,程序使用三层循环来枚举勾股数的三个正整数 `a`、`b`、`c`,并检查是否满足勾股条件 $a^2 + b^2 = c^2$。如果满足条件,则将勾股数的数量 `cnt` 加一。最后,程序输出勾股数的数量 `cnt`。
需要注意的是,由于题目要求 $1 \leq a \leq b \leq c \leq n$,因此程序的三层循环分别从 1 到 `n` 进行枚举。但是,这种方法的时间复杂度为 $O(n^3)$,对于较大的 `n` 可能会超时。可以通过一些优化方法来提高程序效率,例如减少循环次数、使用勾股数的性质等。
阅读全文