2017-10-20 15 views
-1

Spécifiez le nombre de chiffres que vous souhaitez afficher.Divisez 100 nombres en N parties de même longueur

E.g. Si vous spécifiez 2, le résultat doit être 0 et 100. Si vous spécifiez 3, les nombres doivent être 0, 50 et 100. Si vous spécifiez 4, les nombres doivent être 0, 33, 67, 100 etc.

Il doit toujours y avoir la même longueur entre chaque nombre affiché.

+0

Vous voulez N entiers (approximativement) uniformément espacés de 0 à 100 inclus? –

+0

Donc l'espacement est '100/(n -1)'? Il suffit de brancher cela en boucle et de faire un peu d'arrondi. Ce n'est pas un problème JavaScript jusqu'à ce que vous ayez trouvé un algorithme approprié et que vous ayez essayé de l'implémenter avec JS. – nnnnnn

+0

Peut-être changer de titre à quelque chose comme "Split 100 numéros en N parties de même longueur"? – dhilt

Répondre

2

La solution en boucle:

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

Ceci est presque identique à ce que j'ai trouvé, donc je ne vais pas déranger de poster ma fonction, mais notez que cela ne fonctionne pas pour 'run (100, 7)' ou 'run (100, 8)' - les résultats ne pas inclure «100», je suppose en raison des erreurs d'arrondi accumulées. Pour que cela fonctionne, j'ai changé la boucle en '<' plutôt que '<' ', puis j'ai ajouté' result.push (max)' après la boucle. – nnnnnn

+0

@nnnnnn Vous avez raison ... J'ai mis à jour la réponse, merci! – dhilt

+0

@RoyalKode essayez 7 comme deuxième argument ... – 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

Ceci est proche, mais il ne produit pas les bons résultats lorsque l'argument 'number' est 4, 7, 8, etc. D'une part, il doit arrondir les nombres individuels de la boucle, pas l'espacement. – nnnnnn

+0

ouais je pense que la réponse dhilt est ce que OP recherche. ceci donne toujours exactement les mêmes incréments entre #, qui ne totalisent pas toujours 100. –

1

Si vous pouvez utiliser ES6 c'est une belle fonctionnelle d'une doublure pour le faire:

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))

Bien sûr, vous ne pouvez pas toujours avoir la distance exacte entre les nombres lorsque vous voulez des entiers - vous devez arrondir quelque part quand le nombre ne se divise pas de façon égale.