我们都知道能够组成直角三角形三个边的最小一组整数是 3, 4, 5。 现在要求你求出 在一定范围内的 所有可以组成直角三角形三个边的整数组。 给定范围l,r l<=r。求[l,r]内有多少可以组成直角三角形的整数边长,并输出。 输出顺序是 每一对组合,3条边按照非递减序; 所有组合的输出顺序同样按照 非递减序。 注意:例如 3 4 5 和4 3 5 是同一组,只输出3 4 5(非递减序)。 输入说明 有多组测试数据。 每组一行输入 整数l,r。( 0 < l <= r <=5000 ) 输出说明 如果范围内有对应的三边组合,则按照上面所说的顺序输出。 如果范围内没有这样的三边组合,输出"NO"。利用C++实现
时间: 2023-11-27 16:54:43 浏览: 68
C语言实验-从键盘输入三角形三个边的长度,计算该三角形的面积。若输入的三条边不能构成三角形。则直接输出信息“不能构成三角形!”
5星 · 资源好评率100%
以下是C++实现的代码:
```c++
#include <iostream>
using namespace std;
int main() {
int l, r;
while (cin >> l >> r) {
bool hasSolution = false; // 标记是否有解
for (int a = l; a <= r; a++) {
for (int b = a; b <= r; b++) {
int c = a * a + b * b;
if (c > r * r) break; // c超出范围,退出循环
if (c >= l * l && c <= r * r && c > b * b) { // 判断是否满足条件
hasSolution = true;
cout << a << " " << b << " " << (int)sqrt(c) << endl; // 输出结果
}
}
}
if (!hasSolution) cout << "NO" << endl; // 没有解,输出"NO"
}
return 0;
}
```
思路如下:
1. 读入范围 $l$ 和 $r$;
2. 从 $l$ 到 $r$ 枚举直角三角形的一条边 $a$;
3. 从 $a$ 到 $r$ 枚举直角三角形的另一条边 $b$;
4. 计算第三条边 $c$ 的平方 $c^2=a^2+b^2$;
5. 如果 $c^2$ 超出范围 $[l^2,r^2]$,退出循环;
6. 如果 $c^2$ 不小于 $l^2$ 并且不大于 $r^2$,并且 $c^2>b^2$,说明找到了一组解,输出;
7. 如果没有找到解,输出"NO"。
阅读全文