文章

【GESP】C++一级真题练习(202303)luogu-B3834,长方形面积

GESP一级真题练习。为2023年3月一级认证真题,与长方面积构成有关的题目。

luogu-B3834

题目要求

描述

小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有多少种可能的长方形,满足长和宽都是整数?如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。

输入

输入一行,包含一个整数 A,表示长方形的面积。约定 2≤A≤1000。

输出

输出一行,包含一个整数 C,表示有 C 种可能的长方形。

输入样例-1

4

输出样例-1

2

输入样例-2

6

输出样例-2

2


题目分析

根据题目描述,我们可以分析出以下解题思路:

  1. 输入处理:
    • 读入一个整数 A,表示长方形的面积。
  2. 计算可能的长方形数量:
    • 遍历从 1 到 $\sqrt{A}$ 的所有整数 i。这是因为:
      1. 长方形的长和宽是一对因子,如果 i 是 A 的因子,那么 A/i 也是 A 的因子。
      2. 当 i > $\sqrt{A}$ 时,A/i < $\sqrt{A}$,这意味着我们会重复计算已经考虑过的因子对。
      3. 通过只遍历到 $\sqrt{A}$,也就是 $i \times i \leq A$,我们可以找到所有唯一的因子对,同时减少计算量。
    • 如果 A 能被 i 整除,则找到一组可能的长和宽。
    • 计数器加一。
  3. 输出结果:
    • 输出计数器的值,即可能的长方形数量。

这道题目涉及了以下知识点:

  • 输入输出操作
  • 循环语句(for 循环)
  • 条件判断(if 语句)
  • 整数除法和取余运算
  • 计数器的使用

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;

int main() {
    // 定义变量b用于存储输入的长方形面积
    int b;
    // 从标准输入读取面积值
    cin >> b;
    
    // 定义计数器a,用于记录可能的长方形数量
    int a = 0;
    
    // 遍历从1到sqrt(b)的所有可能的宽度
    // i * i <= b 等价于 i <= sqrt(b)
    for (int i = 1; i * i <= b; i++) {
        // 如果b能被i整除,说明找到了一组有效的长和宽
        if (b % i == 0) {
            // 计数器加1
            a += 1;
        }
    }
    
    // 输出结果:可能的长方形数量
    cout << a;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP 学习专题站:GESP WIKI

luogu-”系列题目可在洛谷题库进行在线评测。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

欢迎加入Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答

欢迎加入C++ GESP/CSP认证学习QQ频道,考试资源总结汇总

欢迎加入C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权