现在要求你求出 在一定范围内的 所有可以组成直角三角形三个边的整数组。 给定范围l,r l<=r。求[l,r]内有多少可以组成直角三角形的整数边长,并输出。 输出顺序是 每一对组合,3条边按照非递减序; 所有组合的输出顺序同样按照 非递减序。 注意:例如 3 4 5 和4 3 5 是同一组,只输出3 4 5(非递减序)。用C语言编写程序
时间: 2024-02-06 09:12:44 浏览: 143
好的,您可以使用以下的C语言代码实现该功能:
```c
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
int main() {
int l, r;
printf("请输入范围 [l, r]:");
scanf("%d %d", &l, &r);
int cnt = 0;
for (int a = l; a <= r; a++) {
for (int b = a; b <= r; b++) {
for (int c = b; c <= r; c++) {
if (a * a + b * b == c * c && gcd(a, gcd(b, c)) == 1) {
printf("%d %d %d\n", a, b, c);
cnt++;
}
}
}
}
printf("共找到 %d 组解\n", cnt);
return 0;
}
```
首先定义了一个 `gcd` 函数,用于求两个数的最大公约数。该函数使用递归实现辗转相除法。
然后在 `main` 函数中,读入范围 [l, r],使用三重循环枚举所有可能的三个整数边长,判断是否可以组成直角三角形,并且边长是否互质。如果是,则输出该组解,并且计数器加 1。
最后输出一共找到了多少组解。
希望这个代码可以帮助到您。
阅读全文