【GESP】C++一级真题练习(202303)luogu-B3834,长方形面积
GESP一级真题练习。为2023年3月一级认证真题,与长方面积构成有关的题目。
luogu-B3834
题目要求
描述
小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有多少种可能的长方形,满足长和宽都是整数?如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。
输入
输入一行,包含一个整数 A,表示长方形的面积。约定 2≤A≤1000。
输出
输出一行,包含一个整数 C,表示有 C 种可能的长方形。
输入样例-1
4
输出样例-1
2
输入样例-2
6
输出样例-2
2
题目分析
根据题目描述,我们可以分析出以下解题思路:
- 输入处理:
- 读入一个整数 A,表示长方形的面积。
- 计算可能的长方形数量:
- 遍历从 1 到 √A 的所有整数 i。这是因为:
- 长方形的长和宽是一对因子,如果 i 是 A 的因子,那么 A/i 也是 A 的因子。
- 当 i > √A 时,A/i < √A,这意味着我们会重复计算已经考虑过的因子对。
- 通过只遍历到 √A,也就是 i * i <= A,我们可以找到所有唯一的因子对,同时减少计算量。
- 如果 A 能被 i 整除,则找到一组可能的长和宽。
- 计数器加一。
- 遍历从 1 到 √A 的所有整数 i。这是因为:
- 输出结果:
- 输出计数器的值,即可能的长方形数量。
这道题目涉及了以下知识点:
- 输入输出操作
- 循环语句(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 进行授权