OneCoder Avatar
OneCodercoderli.com · 937 篇博文
二级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【GESP】C++二级真题 luogu-B4356 [GESP202506 二级] 数三角形

📅 2025-07-01·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#多重循环

GESP C++二级,2025年6月真题,多重循环,难度★✮☆☆☆。

luogu-B4356 [GESP202506 二级] 数三角形

题目要求

题目描述

直角三角形有两条直角边与一条斜边,设两条直角边的长度分别为 a,ba, b,则直角三角形的面积为 ab2\frac{ab}{2}

请你计算当直角边长 a,ba, b 均取不超过 nn 的正整数时,有多少个不同的面积为整数的直角三角形。直角边长分别为 a,ba, ba,ba', b' 的两个直角三角形相同,当且仅当 a=aa = a', b=bb = b' 或者 a=ba = b', b=ab = a'

输入格式

一行,一个整数 nn,表示直角边长的最大值。

输出格式

输出一行,一个整数,表示不同的直角三角形数量。

输入输出样例 #1

输入 #1

PLAINTEXT
3

输出 #1

PLAINTEXT
3

输入输出样例 #2

输入 #2

PLAINTEXT
5

输出 #2

PLAINTEXT
9

说明/提示

对于所有测试点,保证 1n10001 \leq n \leq 1000


题目分析

解题思路

本题的解题思路如下:

  1. 问题本质:

    • 输入一个整数 nn,表示直角边长的最大值
    • 需要计算有多少个不同的、面积为整数的直角三角形
  2. 解题关键:

    • 核心思路 - 枚举与计数:
      1. 遍历所有可能的直角边长组合:
        • 第一条边 aa 的范围是 [1,n][1,n]
        • 第二条边 bb 的范围是 [a,n][a,n](从 aa 开始避免重复计数)
      2. 判断面积是否为整数:
        • 面积公式:a×b2\frac{a \times b}{2}
        • 当且仅当 a×ba \times b 为偶数时,面积为整数
  3. 复杂度分析:

    • 时间复杂度:O(n2)O(n^2),需要双重循环遍历所有可能的边长组合
    • 空间复杂度:O(1)O(1),只需要存储几个整数变量

示例代码

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

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

💬 读者留言与交流

0 条讨论
✨ 支持 Markdown 语法格式
还没有留言,快来成为第一个讨论者吧!