一、题目还原
【题目描述】
长、宽均为整数;
长≥宽(正方形算 1 种,长宽相同视为同一种);
长 × 宽 = A。
【输入输出要求】
输入:1 行 1 个整数A(面积)
输出:1 行 1 个整数C(合法长方形种类数)
【样例验证】
二、核心思路拆解
长方形面积公式:长 × 宽 = A,说明长和宽都是 A 的因数;
约定长≥宽,只需找 “≤√A 的因数” 即可(若i是 A 的因数,则A/i必然是另一因数,且i ≤ √A时,A/i ≥ i,完美满足长≥宽)。
i=1
:4%1=0 → 长 = 4/1=4,宽 = 1 → 合法 1 种;
i=2
:4%2=0 → 长 = 2/2=2,宽 = 2 → 合法 1 种;总计 2 种,和样例输出一致!
三、完整代码
#include<stdio.h>intmain(){// 定义变量:A存储输入面积,count统计种类数int A, count = 0;// 输入长方形面积scanf("%d", &A);// 核心循环:遍历1到√A(用i*i <= A替代sqrt,无需额外头文件)for (int i = 1; i * i <= A; i++) {// 判断i是否是A的因数(能整除则合法)if (A % i == 0) {count++; // 每找到1个因数,种类数+1}}// 输出最终结果printf("%d\n", count);return 0;}

四、代码逐行解析
头文件
:仅需#include,无需额外引入math.h,新手考试不踩 “头文件遗漏” 坑;
变量定义
:A存输入面积,count存合法种类数,初始值为 0,逻辑清晰不混乱;
核心循环
:i * i <= A是这道题的满分关键!
因数判断
:A % i == 0表示i能整除A,说明(i, A/i)是一组合法的长宽;
输出结果
:printf("%d\n", count)直接打印统计的种类数,完成题目要求。
五、新手避坑指南
❌ 错误遍历:写for (int i = 1; i <= A; i++),结果翻倍(输入 4 会输出 4,正确是 2);
❌ 忘记头文件:若用sqrt(A),需加#include,否则编译报错;
❌ 忽略规则:忘记长≥宽,直接统计所有因数对(输入 4 会输出 3,包含 1×4、2×2、4×1,错误);
✅ 满分技巧:题目限定2≤A≤1000,无需处理A=0/1的异常情况,简化代码更稳妥。
六、运行结果验证
七、结尾引导