2016-08-03 3 views
-2

ich eine seltsame Frage hast, was ist der beste Weg, Javascript, aus einer großen Zahl beginnendJavascript Split eine große Anzahl in Primzahlen Array

var LargeNumber = 5234223; 

in ein Array So teilen

var SingleNumberArray = []; 

aber mit einem gewissen Grenze:

  1. ich will nicht, dass jede Zahl in dem Feld mehr ist, dass X
  2. will ich nicht soo viele Male die gleiche Nummer verwenden, aus diesem Grund Ich will nicht die MaxValueInArray soo oft

    var MaxValueInArray = 43 drücken;

Damit die Summe aller Array die LargeNumber ist?

Auf den ersten Blick denke ich, dass dies nützlich sein kann, verwenden Sie die Primzahl, aber vielleicht ist dies ein Limit. Vielleicht ist der bessere Weg, eine Zufallsfunktion von 1 bis MaxValueArray zu erstellen, dass jede Schleife eine Zahl generiert und bevor sie in Array geschoben werden, überprüfen Sie, ob die Summe die Startnummer ist, wenn nicht die Zahl schieben und neu starten, bis die Summe des Arrays ist das gleiche wie die Startnummer, aber zu diesem Zeitpunkt denke ich, ist es besser zu überprüfen, wie viel übrig bleibt, um die richtige Übereinstimmung zu haben. Also wenn ich weniger bleibe als das MaxValueInArray kann ich direkt den Wert pushen, der übrig bleibt.

Das Problem ist, dass ich nicht weiß, wie Sie diese Funktion aufschreiben.

BTW, haben Sie eine bessere Idee, das zu tun?

+0

gesetzt Warum Sie Ihre MaxValueInArray schieben DO NOT bis der Rest weniger als MaxValueInArray und den Rest schieben? – juvian

+0

Nur weil ich nicht alle die gleichen Zahlen haben möchte, habe ich vielleicht nicht sagen: D –

+0

Nun, dann ist die Idee die gleiche, aber eine zufällige Zahl zwischen 1 und MaxValueInArray – juvian

Antwort

1

Seien Sie vorsichtig, dies kann auf einem Computational Plan intensiv sein.

Jede Zahl ist zufällig zwischen 0 und der Zahl, die Sie

var LargeNumber = 5234223; 
 
var MaxValueInArray = 43; 
 
var MinValueInArray = 1; 
 
var SingleNumberArray = []; 
 

 

 
while (LargeNumber !== 0) { 
 
    let n = Math.floor(Math.random() * (MaxValueInArray - MinValueInArray + 1)) + MinValueInArray; 
 
    if (LargeNumber -n < 0) continue; 
 
    LargeNumber -= n; 
 
    SingleNumberArray.push(n); 
 
} 
 

 
console.log(5234223 === SingleNumberArray.reduce((i, j) => i + j)) 
 
console.log(SingleNumberArray);

+0

Tnx, gibt es keine Chance, die Zufallszahl von 1 oder von einer definierten Var zu haben? –

+0

@JormanFranzini sicher, siehe aktualisierte Antwort – rpadovani

+0

Ty, ich denke, das ist ein guter Ansatz! –