文章

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

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

  • 输入输出操作
  • 循环语句(for 循环)
  • 条件判断(if 语句)
  • 整数除法和取余运算
  • 计数器的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main() {
    int b;
    cin >> b;
    int a = 0;
    for (int i = 1; i * i <= b; i++) {
        if (b % i == 0) {
            a += 1;
        }
    }
    cout << a;
}

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

题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

本文由作者按照 CC BY 4.0 进行授权