将100个号码拆分为N个相同长度的部分
问题描述:
指定要显示的号码数量。将100个号码拆分为N个相同长度的部分
例如如果 指定2,则结果应该为0和100.如果指定3,则数字应为0,50和100.如果指定4,则数字应为0,33,67,100等。
每个显示的数字之间应始终保持相同的长度。
答
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]
答
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。 –
答
如果你可以使用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))
当你想要整数时,当然不能总是有数字之间的确切距离 - 当数字不均匀分割时,你需要在某个地方舍入。
您希望N个整数(大约)从0到100均匀间隔(包括)? –
所以间距是'100 /(n-1)'?只需将其插入一个循环并做一些修整。直到你提出了一个合适的算法并且试图用JS实现它之后,这不是JavaScript问题。 – nnnnnn
也许将标题改为“将100个数字分成N个相同长度的部分”? – dhilt