现在要求你求出 在一定范围内的 所有可以组成直角三角形三个边的整数组。 给定范围l,r l<=r。求[l,r]内有多少可以组成直角三角形的整数边长,并输出。 输出顺序是 每一对组合,3条边按照非递减序; 所有组合的输出顺序同样按照 非递减序。 注意:例如 3 4 5 和4 3 5 是同一组,只输出3 4 5(非递减序)。 输入说明 有多组测试数据。 每组一行输入整数l,r。( 0 < l <= r <=5000 ) 输出说明 对于每组测试输入,单独1行输出。 如果范围内有对应的三边组合,则按照上面所说的顺序输出。 如果范围内没有这样的三边组合,输出"NO"。用C语言编写
时间: 2024-02-06 08:12:46 浏览: 69
好的,我来为您解决这个问题。这个问题可以使用三重循环来解决,首先枚举 a, b 的值,然后根据勾股定理计算出 c 的值,判断是否符合条件。具体实现可以参考下面的代码:
```c
#include <stdio.h>
int main() {
int l, r;
while (scanf("%d %d", &l, &r) != EOF) {
int count = 0; // 统计数量
for (int a = l; a <= r; a++) {
for (int b = a; b <= r; b++) { // b 从 a 开始避免重复
int c = a*a + b*b;
int temp = (int)sqrt(c); // 取整,避免浮点数误差
if (temp*temp == c && temp <= r) { // 判断是否符合条件
printf("%d %d %d\n", a, b, temp);
count++;
}
}
}
if (count == 0) {
printf("NO\n");
}
}
return 0;
}
```
以上代码中,我们使用了 sqrt 函数来计算平方根,需要注意的是,由于 sqrt 返回的是浮点数,我们需要将其转换为整数,可以使用强制类型转换来实现。另外,为了避免浮点数误差,我们将计算出的 c 取整后再进行判断。