11.06 毕达哥拉斯三元组 (10 分)
一个直角三角形具有边长均为整数的三条边。直角三角形边长的这组整数值称为毕达哥拉斯三元组(中国称为勾股数)。这三条边必须满足这样的关系:两条直角边的平方之和必须等于直角三角形斜边的平方。从键盘输入一个正整数n,请找出不大于n的所有毕达哥拉斯三元组。可以使用一个三重嵌套的for循环语句,它可以非常简单地尝试所有的可能性。这是一个穷举法的典型例子。
对于很多人来说,这种技术并不美观,也不令人愉快。但有很多理由可以说明为什么这种技术是重要的。首先,随着计算功能显著增强,几年前使用这种技术,需要几年甚至几个世纪的计算时间才能够得到结果的解决方案,现在能够在几个小时、几分钟甚至几秒之内就得到结果。其次,在以后的计算机科学课程中,你将学到,除了使用穷举法之外,有大量的有趣问题无法用更高效的算法来解决。
输入一个正整数n。
以(a, b, c)的形式,按字典顺序输出不大于n的所有毕达哥拉斯三元组。每个三元组占一行。注意每个逗号后面有一个空格,括号前后均没有空格。
10
结尾无空行
(3, 4, 5) (4, 3, 5) (6, 8, 10) (8, 6, 10)
20
结尾无空行
(3, 4, 5) (4, 3, 5) (5, 12, 13) (6, 8, 10) (8, 6, 10) (8, 15, 17) (9, 12, 15) (12, 5, 13) (12, 9, 15) (12, 16, 20) (15, 8, 17) (16, 12, 20)
#include <stdio.h> #include <math.h> int main() { int n, a, b, c; scanf("%d", &n); for (a = 1; a <= n; a++) { for (b = 1; b <= n; b++) { for (c = 1; c <= n; c++){ { if (c * c == a * a + b * b && a + b > c) printf("(%d, %d, %d)\n", a, b, c); } } } } return 0; }
三重嵌套的for循环语句