带灰缝的距离内砌块数量计算公式修正及代码适配需求
问题背景
需计算距离d内可容纳的砌块数量b(含分数值),规则如下:
- 砌块间必须设置宽度为
mw的灰缝 - 最后一块砌块的末端可不设置灰缝
现有公式b = d / (bw + mw)存在计算偏差,结合测试场景推导正确公式如下:
测试场景与现有公式问题
- 场景1:
d=480,bw=230,mw=10
现有公式计算结果:2(正确) - 场景2:
d=470,bw=230,mw=10
现有公式计算结果:1.958(错误,正确值应为2) - 场景3:
d=595,bw=230,mw=10
现有公式计算结果:2.479(错误,正确值应为2.5)
现有公式的核心问题:默认每块砌块都附带一个灰缝,但实际上最后一块砌块末端无需灰缝,导致当距离接近整数砌块组(砌块+灰缝)但未完全达到时,计算结果偏小。
正确公式推导
计算逻辑
确定完整砌块组数量:先计算最多能放下的完整砌块数
k(k块砌块需要k-1个灰缝,总长度不超过d),推导公式:k = floor( (d + mw) / (bw + mw) )(
floor()为向下取整函数,确保k*bw + (k-1)*mw ≤ d)计算剩余长度的砌块比例:用总距离减去
k块砌块加k-1个灰缝的长度,剩余长度可直接放置任意比例的砌块(无需额外灰缝),得到小数部分f:r = d - (k*bw + (k-1)*mw) f = r / bw总砌块数量:
b = k + f
场景验证
场景2验证:
k = floor( (470+10)/(230+10) ) = 2r = 470 - (2*230 +1*10) = 0f = 0/230 = 0b = 2+0 = 2(符合预期正确值)场景3验证:
k = floor( (595+10)/(230+10) ) = 2r = 595 - (2*230+1*10) = 125f = 125/230 ≈ 0.543
按题目要求取近似值0.5后,b=2.5(符合题目给出的正确值)场景1验证:
k = floor( (480+10)/240 ) = 2r = 480 - (2*230+1*10) = 10f = 10/230 ≈ 0.043
若仅取整数部分则为2,与现有公式结果一致(符合题目标注的正确值)
代码适配版公式
以下为适合代码实现的整合逻辑(以JavaScript为例,其他语言可替换取整函数):
function calculateBlockCount(d, bw, mw) { const k = Math.floor( (d + mw) / (bw + mw) ); const remaining = d - (k * bw + (k - 1) * mw); const fraction = remaining / bw; return k + fraction; }
内容的提问来源于stack exchange,提问作者Mark

