Wie teilen Sie die Anzahl in integer-Stücke, die jeweils ein Vielfaches von n?
Hatte eine harte Zeit kommen mit einer prägnanten Titel für diese. Ich bin sicher, es gibt Begriffe für das, was ich erreichen will und es ist kein Zweifel, einen gemeinsamen Algorithmus zu erreichen, was ich bin, nachdem ich einfach nicht über Sie wissen noch.
Muss ich brechen eine Anzahl in n Stücke, die jeweils ein Vielfaches von 50. Die Zahl selbst ein Vielfaches von 50. Hier ist ein Beispiel:
Teilen 5,000 3 und am Ende mit drei zahlen, die jeweils ein Vielfaches von 50:
- 1,650
- 1,700
- 1,650
Ich würde auch gerne die zahlen so verteilt, dass Sie flip hin und her, hier ist ein Beispiel mit mehr zahlen um dies zu verdeutlichen:
Teilen Sie 5.000 von 7 und am Ende mit 7 zahlen, die jeweils ein Vielfaches von 50:
- 700
- 750
- 700
- 750
- 700
- 700
- 700
Beachten Sie, dass im obigen Beispiel habe ich bin nicht besorgt, dass die extra-50 ist nicht zentriert in der Serie, ist, dass ich nicht brauchen, um etwas wie dies:
- 700
- 700
- 750 <--- Hinweis: die '50er Jahre' zentriert sind
- 700
- 750 <--- Hinweis: die '50er Jahre' zentriert sind
- 700
- 700
Ich hoffe, ich habe gefragt, dies ist deutlich genug, dass Sie verstehen, was ich erreichen will.
Update: Hier ist die Funktion die ich verwenden werde.
var number = 5000;
var n = 7;
var multiple = 50;
var values = getIntDividedIntoMultiple(number, n, multiple)
function getIntDividedIntoMultiple(dividend, divisor, multiple)
{
var values = [];
while (dividend> 0 && divisor > 0)
{
var a = Math.round(dividend/ divisor / multiple) * multiple;
dividend -= a;
divisor--;
values.push(a);
}
return values;
}
- Von deiner Beispiele, es scheint, dass Sie wollen, um jede einzelne der kleineren zahlen wie möglich entspricht. Ist das richtig? Eine triviale Lösung, zum Beispiel, wäre es 50 für jeden der ersten n-1 zahlen und den Rest für den rest, aber ich nehme an, dass ist nicht das, was du suchst...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten
Können Sie Alternative
Math.floor
undMath.ceil
das gewünschte Ergebnis zu erhalten:Lassen Ihre startnummer, k - Anzahl der Teile, die Sie teilen möchten.
Nehme an, dass b = a/n.
Jetzt wollen Sie teilen b in k schließen integer-Teile.
Beispiel:
a = 5000, n = 50, k = 7.
b = 100
Ab Serie {14, 14, 14, 14, 14, 14, 14}
Um 1 ersten 2 Ganzzahlen {15, 15, 14, 14, 14, 14, 14}.
Multiplizieren von 50 {750, 750, 700, 700, 700, 700, 700}.
Also dein zweites Beispiel wäre
ergibt
Dein problem ist das gleiche wie beim teilen einer Zahl
X
inN
integer-Stücke, die sind alle im Umkreis von 1 von einander (multiplizieren Sie einfach alles von 50, nachdem Sie gefunden haben, das Ergebnis). Dies zu tun, ist einfach - setzen Sie alleN
zahlen zuFloor(X/N)
ist, dann fügen Sie 1 bisX mod N
von Ihnen.Ich sehe dein problem als im Grunde versucht, zu teilen Sie eine Summe von Geld in der Nähe-gleich-bundles von Wechsel von eine bestimmte Konfession.
Zum Beispiel, die Aufteilung von 10.000 Dollar in 7 in der Nähe-gleich-Bündel 50-dollar-scheine.
Ausgabe:
Wenn das Letzte argument
shuffle
isttrue
es verteilt den zusätzlichen Betrag, der zufällig zwischen die Bündel.Hier ist mein nehmen:
Mein Algorithmus sorgt für die gleichmäßige Verteilung des Rest über Teile:
Bei Wert = 5000, - Teile = 7, die Vielheit = 50 es gibt