题解
2026-02-05 23:27:48
发布于:浙江
10阅读
0回复
0点赞
题目解析
- 输入输出:输入一个整数 ;输出满足条件的不同直角三角形数量,其中直角边长 均为不超过 的正整数,且两直角边无序(即 与 视为同一种)。
- 数据范围:,规模允许 枚举。
- 复杂度要求:时间复杂度 ,空间复杂度 。
- 算法知识点:
数学、枚举、奇偶性分析、去重策略
思路解析
- 面积整数条件:直角三角形面积 。要使 为整数,必须满足 为偶数,即 和 中至少有一个是偶数(若两者均为奇数,则乘积为奇数,面积为半整数)。
- 去重策略:题目规定 与 视为相同的三角形。为避免重复计数,在枚举时强制规定 (代码中体现为内层循环 从 开始),这样每个无序数对仅被统计一次。
- 枚举统计:使用双重循环遍历所有满足 的无序对,判断 的奇偶性。若为偶数,则该组合对应的三角形面积必为整数,答案加一。
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int ans = 0;
// 枚举所有无序对 (i, j),满足 1 ≤ i ≤ j ≤ n
for (int i = 1; i <= n; i++) {
// 关键:j 从 i 开始,确保 i ≤ j,自动处理 (a,b) 与 (b,a) 的去重
for (int j = i; j <= n; j++) {
// 判断面积是否为整数:i*j/2 为整数 ⟺ i*j 为偶数
if (i * j % 2 == 0) {
ans++;
}
}
}
cout << ans << endl;
return 0;
}
这里空空如也

有帮助,赞一个