202303-长方形面积(luogu-B3834)

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 到 A\sqrt{A} 的所有整数 i。这是因为:
      1. 长方形的长和宽是一对因子,如果 i 是 A 的因子,那么 A/i 也是 A 的因子。
      2. 当 i > A\sqrt{A} 时,A/i < A\sqrt{A},这意味着我们会重复计算已经考虑过的因子对。
      3. 通过只遍历到 A\sqrt{A},也就是 i×iAi \times i \leq A,我们可以找到所有唯一的因子对,同时减少计算量。
    • 如果 A 能被 i 整除,则找到一组可能的长和宽。
    • 计数器加一。
  3. 输出结果:

    • 输出计数器的值,即可能的长方形数量。

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

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

示例代码

#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

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

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

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on