二级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++二级真题 luogu-B4356 [GESP202506 二级] 数三角形
📅 2025-07-01·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#多重循环
GESP C++二级,2025年6月真题,多重循环,难度★✮☆☆☆。
luogu-B4356 [GESP202506 二级] 数三角形
题目要求
题目描述
直角三角形有两条直角边与一条斜边,设两条直角边的长度分别为 ,则直角三角形的面积为 。
请你计算当直角边长 均取不超过 的正整数时,有多少个不同的面积为整数的直角三角形。直角边长分别为 和 的两个直角三角形相同,当且仅当 , 或者 , 。
输入格式
一行,一个整数 ,表示直角边长的最大值。
输出格式
输出一行,一个整数,表示不同的直角三角形数量。
输入输出样例 #1
输入 #1
PLAINTEXT
3
输出 #1
PLAINTEXT
3
输入输出样例 #2
输入 #2
PLAINTEXT
5
输出 #2
PLAINTEXT
9
说明/提示
对于所有测试点,保证 。
题目分析
解题思路
本题的解题思路如下:
-
问题本质:
- 输入一个整数 ,表示直角边长的最大值
- 需要计算有多少个不同的、面积为整数的直角三角形
-
解题关键:
- 核心思路 - 枚举与计数:
- 遍历所有可能的直角边长组合:
- 第一条边 的范围是
- 第二条边 的范围是 (从 开始避免重复计数)
- 判断面积是否为整数:
- 面积公式:
- 当且仅当 为偶数时,面积为整数
- 遍历所有可能的直角边长组合:
- 核心思路 - 枚举与计数:
-
复杂度分析:
- 时间复杂度:,需要双重循环遍历所有可能的边长组合
- 空间复杂度:,只需要存储几个整数变量
示例代码
CPP
#include <iostream>
int main() {
// 读入直角边长的最大值n
int n;
std::cin >> n;
// 计数器,记录满足条件的直角三角形数量
int count = 0;
// 遍历所有可能的直角边长组合
for (int i = 1; i <= n; i++) {
// j从i开始避免重复计数
for (int j = i; j <= n; j++) {
// 判断面积是否为整数:面积 = (i*j)/2
if (i * j % 2 == 0) {
count++;
}
}
}
// 输出结果
std::cout << count << std::endl;
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
💬 读者留言与交流
还没有留言,快来成为第一个讨论者吧!