我正在尝试将这些'if'语句转换为算法,以便我可以有更多的阶段而不是被限制为10。如何转换它?我只是无法绕开逻辑!
function getStage(km) {
if (km > 2 && km < 4){
return 1;
}
else if (km > 4 && km < 6){
return 2;
}
else if (km > 6 && km < 8){
return 3;
}
else if (km > 8 && km < 10){
return 4;
}
else if (km > 10 && km < 12){
return 5;
}
else if (km > 12 && km < 14){
return 6;
}
else if (km > 14 && km < 16){
return 7;
}
else if (km > 16 && km < 18){
return 8;
}
else if (km > 18 && km < 20){
return 9;
}
else if (km > 20 && km < 22){
return 10;
}
}
我已经尝试过了:
function getStage(km) {
var tempStage = 0;
for (var i = 0; i < stages; i++) {
var stage = i + 1;
var tempKm = stage * 2;
var nextKm = stage + 2;
if (km > tempKm && km < nextKm) {
tempStage = stage;
}
}
return tempStage;
}
也许我不应该使用for循环?有更好的方法吗?
答案 0 :(得分:4)
也许您正在寻找Math.floor
sum(zip(*array)[1])/len(array)
答案 1 :(得分:2)
您可以将km
的底值除以2加1。
10
是上限。
function getStage(km) {
return Math.min((km >> 1) + 1, 10);
}
console.log(getStage(2.1)); // 2
console.log(getStage(3)); // 2
console.log(getStage(4)); // 4
答案 2 :(得分:2)
您可以使用数学来做到这一点。无需循环或条件。
请注意,您的输入间隔以2的“步长”增加,而输出以1的“步长”增加。这让我觉得也许我们应该将公里除以2 。
由于我们一直想要整数答案,因此可以使用 floor 函数。
一些例子:
floor(3/2)= 1
floor(4.1 / 2)= 2
等等
根据您要返回的极端情况(如果km = 2或km = 4或2的任意倍数怎么办?),我们可以在这里完成。如果希望在k = 4时返回1,在k = 6时返回2,依此类推,则需要做更多的工作。
*通常:* 如果您正在处理数字,并且发现自己写了很多情况,则通常可以使用一些简单的数学运算符组合来计算结果。对于此类问题,请尝试考虑您的输入/输出对以及它们之间的关系。
答案 3 :(得分:0)
尝试类似这样的方法。这是一种通用解决方案,不仅适用于2*n
系列。
const stages = [2, 4, 6, 8, 10, 13, 15, 16, 20]; //should be ordered. Else sort it first.
const getStage = km => stages.indexOf(stages.find(i => km < i));
console.log(getStage(5)); //2
console.log(getStage(1.5)); //0
console.log(getStage(8.1)); //4
console.log(getStage(15)); //7
console.log(getStage(22)); //-1 out of index