Es war ein warmer Sommerabend ...
Als mein dummes Auto beschloss, auf dem Rückweg vom Supermarkt mitten auf der Straße eine Panne zu haben. Ich schob es an die Seitenlinie und beschloss, nach Hause zu gehen. Ich öffnete den Kofferraum, um das Lebensmittelgeschäft und die restlichen Sachen herauszunehmen. Zu diesem Zeitpunkt bemerkte ich, dass die Artikel nicht gleichmäßig verpackt waren. Einige Taschen hatten schwerere Gegenstände, andere hatten weniger leichtere Sachen - einige hatten sogar eine Mischung aus solchen Gegenständen. Um mir das Tragen zu erleichtern, habe ich beschlossen, alles in zwei Säcke zu gruppieren und die Gewichte so nah wie möglich aneinander zu bringen.
Dein Ziel
soll mir helfen, die Artikel in zwei Einkaufstaschen so zu ordnen, dass der Unterschied zwischen beiden Taschen so nahe wie möglich bei Null liegt.
Mathematisch:
GEWICHT LINKE HAND - GEWICHT RECHTE HAND ≈ 0
Beispiel
Wenn ich nur 2 Artikel hatte, Brot und Erdnussbutter, und das Gewicht von Brot beträgt 250 Gramm und Erdnussbutter 150 Gramm, ist der beste Weg, sie separat in zwei Händen zu tragen.
W LH - W RH = W (BROT) - W (P. BUTTER)
250 - 150 = 100
Die andere Möglichkeit ist:
W (BROT, P. BUTTER) - W (leere Hand) = (250 + 150) - 0 = 400
Dies ist nicht besser als unser erster Fall, deshalb sollten Sie den ersten Fall wählen.
Ihr Code sollte
- Geben Sie Zahlen ein, die das Gewicht der Artikel in der Einkaufstasche angeben. Einheiten sind nicht wichtig, sollten aber gleich sein (idealerweise Kilogramm oder Gramm). Die Eingabe kann einzeln oder alle gleichzeitig erfolgen. Sie können die Gesamtanzahl auf maximal 20 Elemente beschränken, wenn Sie möchten.
- Das Eingabeformat / der Eingabetyp können Sie selbst auswählen, es sollte jedoch nichts anderes als die Gewichte vorhanden sein.
- Jede Sprache ist erlaubt, aber halte dich an Standardbibliotheken.
- Ausgabe anzeigen. Auch hier können Sie das Format frei wählen, aber das Format in Ihrem Beitrag erläutern. dh wie können wir erkennen, welche Gegenstände für die linke Hand und welche für die rechte Hand sind.
Punkte
- Kürzester Code gewinnt.
Hinweis
Die beiden möglichen Algorithmen, die ich mir vorstellen könnte, sind Differenzierung (schneller) und Permutationen / Kombinationen (langsamer). Sie können diesen oder einen anderen Algorithmus verwenden, der die Aufgabe erfüllt.