如何在JavaScript中按1:2:3比例定义长度变量,使其总长度之和等于270?
如何在JavaScript中按1:2:3比例定义长度变量,使其总长度之和等于270?
嘿,我完全懂你现在的困扰——要让短、中、长三种字符的长度保持1:2:3的固定比例,同时所有字符的总长度加起来刚好是270对吧?之前的代码之所以没达到预期,是因为你把三个长度都当成了独立变量来求解,但其实它们是有明确比例关系的,咱们可以把问题简化很多。
核心思路:利用比例关系简化计算
首先,咱们明确比例规则:
mediumLength = 2 * shortLength(中长度是短长度的2倍)longLength = 3 * shortLength(长长度是短长度的3倍)
把这两个关系代入总长度的等式里,原来的总长度公式:270 = (longLength * longCount) + (mediumLength * mediumCount) + (shortLength * shortCount)
就可以替换成:270 = (3*shortLength*longCount) + (2*shortLength*mediumCount) + (shortLength*shortCount)
接下来把shortLength提出来,变成:270 = shortLength * (3*longCount + 2*mediumCount + shortCount)
这样就能直接算出shortLength,再根据比例算出另外两个长度就好啦!
修正后的代码示例
// 定义变量 let shortLength; let mediumLength; let longLength; let shortCount = 0; let mediumCount = 0; let longCount = 0; // 假设你的计数逻辑已经正确设置了count的值,这里直接用它们计算 if (totalCount > 1) { // 计算总系数:把每个count按比例转换成对应的权重 const totalCoefficient = shortCount + 2 * mediumCount + 3 * longCount; // 防止除以0的情况(虽然你说count不全为0,但加个判断更稳妥) if (totalCoefficient === 0) { // 极端情况处理,比如所有count都是0,这里可以按需求调整 shortLength = mediumLength = longLength = 0; } else { // 计算基础的短长度 shortLength = 270 / totalCoefficient; // 根据比例算出中、长长度 mediumLength = 2 * shortLength; longLength = 3 * shortLength; } } else { // 只有一个字符的情况,直接让所有长度等于270(和你原来的逻辑一致) shortLength = mediumLength = longLength = 270; }
举个实际例子验证
比如假设你的计数结果是:shortCount=2,mediumCount=1,longCount=1
- 总系数 = 2 + 21 +31 = 7
- shortLength = 270 /7 ≈38.57
- mediumLength = 2*38.57≈77.14
- longLength=3*38.57≈115.71
- 总长度:238.57 +177.14 +1*115.71 ≈270,完全符合要求!
之前的代码之所以“scuffed”,是因为你把longLength和mediumLength当成了未知量,但其实它们是完全依赖shortLength的,这样方程就有无数解,自然得不到正确结果。现在用比例关系把问题简化成单变量求解,就清晰多啦~
备注:内容来源于stack exchange,提问作者phineas younce
相关产品推荐
相关产品推荐

