2017-10-20 42 views
-1

指定要显示的号码数量。将100个号码拆分为N个相同长度的部分

例如如果 指定2,则结果应该为0和100.如果指定3,则数字应为0,50和100.如果指定4,则数字应为0,33,67,100等。

每个显示的数字之间应始终保持相同的长度。

+0

您希望N个整数(大约)从0到100均匀间隔(包括)? –

+0

所以间距是'100 /(n-1)'?只需将其插入一个循环并做一些修整。直到你提出了一个合适的算法并且试图用JS实现它之后,这不是JavaScript问题。 – nnnnnn

+0

也许将标题改为“将100个数字分成N个相同长度的部分”? – dhilt

回答

2

for循环的解决方案:

const run = (max, num) => { 
 
    let result = []; 
 
    let part = max/(num - 1); 
 
    for(let i = 0; i < max; i += part) { 
 
    result.push(Math.round(i)); 
 
    } 
 
    result.push(max); 
 
    return (result); 
 
}; 
 

 
console.log(run(100, 4)); // [0, 33, 67, 100] 
 
console.log(run(100, 5)); // [0, 25, 50, 75, 100] 
 
console.log(run(100, 7)); // [0, 17, 33, 50, 67, 83, 100]

+0

这与我想出的几乎完全相同,所以我不会打扰发布我的函数,但请注意,它对'run(100,7)'或'run(100,8)'不起作用 - 结果不包括'100',我假设是因为积累的舍入误差。为了让它起作用,我把循环改成了<<而不是'<=',然后在循环后面添加了'result.push(max)'。 – nnnnnn

+0

@nnnnnn你是对的...我更新了答案,谢谢! – dhilt

+0

@RoyalKode尝试7作为第二件作品... – dhilt

0
function numbers(number){ 
    var max=100; 
    spacing = Math.floor(max/ (number-1)); 
    var returnMe = [0]; 
    var cur=spacing; 
    while(cur <= max){ 
    returnMe.push(cur); 
    cur+=spacing; 
    } 
    return returnMe; 
} 
+0

这很接近,但当'number'参数是4,7,8等时,它不会产生正确的结果。一方面,它应该围绕循环中的各个数字,而不是'spacing'。 – nnnnnn

+0

是的,我认为dhilt答案是OP正在寻找。这总是给予#之间完全相同的增量,这些增量并不总是合计为100。 –

1

如果你可以使用ES6这是一个很好的功能性的一行做到这一点:

const fn = (n, l) => [...Array(n)].map((i, id) => Math.floor(l/(n-1) * id)) 
 

 
console.log(fn(4,100)) 
 
console.log(fn(2,100))

当你想要整数时,当然不能总是有数字之间的确切距离 - 当数字不均匀分割时,你需要在某个地方舍入。

相关问题