求用长度为N的线材制作边长为L的正方形的最大数量的解题提示
问题描述
现有一段长度为N的线材,需计算用该线材可制作的边长为L的正方形的最大数量。输入参数为n(线材总长度)、l(正方形边长),输出为可制作的正方形的最大数量。
我的实现代码
#include<iostream> #include<cmath> #include <algorithm> using namespace std; int main(){ int n,m,sum=0; cin>>n>>m; int c=0; while(n!=sum) { int x=m; x*=4; sum+=x; c++; } cout<<c; }
代码问题分析
- 变量命名不清晰:输入的第二个参数
m对应题目中的边长L,命名与实际含义不符,易造成混淆。 - 循环逻辑错误:循环条件
n!=sum存在严重问题:- 当线材总长度
n不是单个正方形所需长度(4*L)的整数倍时,sum会持续累加直至超过n,但循环不会终止,直接进入无限循环。 - 即使
n是整数倍,该条件也不符合实际需求逻辑——我们需要的是不超过n的最大累加次数,而非必须让sum等于n。
- 当线材总长度
- 冗余头文件:代码中引入了
<cmath>和<algorithm>,但全程未使用其中的函数,属于无效引入。
正确实现方案
单个正方形需要的线材长度为4*l,最大可制作数量就是总长度n除以单个正方形所需长度的整数结果(整数除法自动舍去小数部分,符合“最大数量”的要求)。
#include<iostream> using namespace std; int main(){ int n, l; cin >> n >> l; int per_square = 4 * l; // 处理边长为0的异常情况(实际场景中L应为正整数) if (per_square == 0) { cout << 0 << endl; return 0; } cout << n / per_square << endl; return 0; }
内容的提问来源于stack exchange,提问作者Mr xrobot
相关产品推荐
相关产品推荐

