Code Wars猫咪堆叠总高度计算问题求助(含错误JS代码)
问题分析与解决方案
问题回顾
戴帽子的猫(The Cat In The Hat)的帽子下面有猫A,猫A的帽子下面有猫B,以此类推直到猫Z。
戴帽子的猫身高为2,000,000猫单位。
每只猫的身高是其帽子下面那只猫的2.5倍。
计算这些猫互相堆叠起来的总身高。
计数从戴帽子的猫开始。
n = 猫的数量
结果保留3位小数。
你的代码问题
你当前的代码逻辑完全偏离了问题本质:
- 循环次数写死为
2000000,和输入的猫数量n无关,完全错误 - 每次累加
n * a,没有体现每只猫身高的比例关系,完全不符合题目中“每只猫身高是下方猫的2.5倍”的规则
正确思路:等比数列求和
这是一个典型的等比数列求和问题:
- 第1只猫(戴帽子的)身高:
a₁ = 2000000 - 第2只猫身高:
a₂ = a₁ / 2.5(因为上方猫是下方猫的2.5倍,所以下方猫是上方的1/2.5) - 第k只猫身高:
aₖ = a₁ / (2.5)^(k-1) - 公比
r = 1/2.5 = 0.4
等比数列前n项求和公式:
Sₙ = a₁ * (1 - rⁿ) / (1 - r)
用公式计算比循环累加更高效,也避免了循环带来的精度或性能问题。
正确代码
function height(n) { if (n <= 0) return '0.000'; const firstCatHeight = 2000000; const commonRatio = 1 / 2.5; const totalHeight = firstCatHeight * (1 - Math.pow(commonRatio, n)) / (1 - commonRatio); return totalHeight.toFixed(3); }
验证示例
- 当
n=1时,返回2000000.000(只有戴帽子的猫) - 当
n=2时,返回2800000.000(2000000 + 800000) - 当
n=3时,返回3120000.000(2000000 + 800000 + 320000)
内容的提问来源于stack exchange,提问作者Trenton Hammons
相关产品推荐
相关产品推荐

