来源:GESP C++ 二级模拟题
本文给出官方参考答案的详细解析,包括每一部分的功能和关键点,以及与浮点数精度相关的问题的分析。
题目描述
勾股数是很有趣的数学概念。如果三个正整数a 、b 、c ,满足a2 + b2 = c2 ,而且1 ≤ a ≤ b ≤ c ,我们就将a 、b 、c组成的三元组(a, b, c)称为勾股数。你能通过编程,数数有多少组勾股数,能够满足c ≤ n吗?
输入描述
输入一行,包含一个正整数n 。约定 1 ≤ n ≤ 1000。
输出描述
输出一行,包含一个整数C ,表示有C组满足条件的勾股数。
样例输入1
5
样例输出1
1
样例解释1
满足c ≤ 5 的勾股数只有一组,即 (3,4,5)。
样例输入 2
13
样例输出 2
3
样例解释 2
满足c ≤ 13 的勾股数有 3 组,即 (3,4,5) 、(6,8, 10) 和 (5, 12, 13)。
代码实现
下面是官方给出的参考答案:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, cnt = 0;
cin >> n;
for (int a = 1; a <= n; a++)
for (int b = a; b <= n; b++) {
int c2 = a * a + b * b;
int c = (int)(sqrt(c2) + 0.5);
if (c > n)
break;
if (c * c == c2)
cnt++;
}
cout << cnt << endl;
return 0;
}
代码解析
以下是对这段代码的详细解析,包括每一部分的功能和关键点,以及与浮点数精度相关的问题的分析。
代码功能
这段代码用于统计满足以下条件的毕达哥拉斯三元组 ((a, b, c)) 的数量:
- a , b , c a, b, c a,b,c 是正整数。
- a ≤ b ≤ c a \leq b \leq c a≤b≤c。
- a 2 + b 2 = c 2 a^2 + b^2 = c^2 a2+b2=c2。
- c ≤ n c \leq n c≤n,其中 n n n 是用户输入的最大值。
输出结果为满足上述条件的三元组的总数量。
代码结构和解析
1. 输入和初始化
int n;
int cnt = 0;
cin >> n;
- 功能:从标准输入读取整数 n n n,表示三元组中