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

Last updated on