2017-10-20 50 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))

當你想要整數時,當然不能總是有數字之間的確切距離 - 當數字不均勻分割時,你需要在某個地方舍入。

相關問題