在C语言中,求勾股数通常可以通过以下几种方法实现:
方法一:穷举法
通过三重循环遍历所有可能的整数组合,检查它们是否满足勾股定理 \(a^2 + b^2 = c^2\)。
```c
include
int main() {
int a, b, c;
for (a = 1; a <= 100; a++) {
for (b = a; b <= 100; b++) {
for (c = b; c <= 100; c++) {
if (a * a + b * b == c * c) {
printf("(%d, %d, %d)\n", a, b, c);
}
}
}
}
return 0;
}
```
方法二:函数判断法
定义一个函数来判断三个数是否构成勾股数,然后在主函数中遍历所有可能的组合。
```c
include include bool judge(int a, int b, int c) { return (pow(a, 2) + pow(b, 2) == pow(c, 2)); } int main() { int a, b, c; for (a = 1; a <= 100; a++) { for (b = a; b <= 100; b++) { for (c = b; c <= 100; c++) { if (judge(a, b, c)) { printf("(%d, %d, %d)\n", a, b, c); } } } } return 0; } ``` 方法三:优化遍历法 在遍历过程中,可以加入一些优化条件,比如避免重复组合和无效循环。 ```c include int main() { int a, b, c; for (a = 1; a <= 100; a++) { for (b = a + 1; b <= 100; b++) { c = sqrt(a * a + b * b); if (c <= 100 && c == (int)c) { printf("(%d, %d, %d)\n", a, b, (int)c); } } } return 0; } ``` 方法四:输入指定范围内的勾股数 如果需要求特定范围内的勾股数,可以修改循环范围。 ```c include int main() { int a, b, c; int N = 1000; for (a = 1; a <= N; a++) { for (b = a + 1; b <= N; b++) { c = sqrt(a * a + b * b); if (c <= N && c == (int)c) { printf("%d, %d, %d\n", a, b, (int)c); } } } return 0; } ``` 总结 以上方法都可以用来求勾股数,选择哪种方法取决于具体需求和编程习惯。穷举法简单直接,但效率较低;函数判断法提高了代码的可读性和可维护性;优化遍历法减少了不必要的计算;输入指定范围内的勾股数则更加灵活。