Schleifen in Python durchlaufen?

8

Ich versuche, dieses Problem im einfachen Abschnitt von coderbyte zu lösen, und die Eingabeaufforderung lautet:

Lassen Sie die Funktion ArrayAdditionI (arr) das Array von in arr gespeicherten Zahlen nehmen und geben Sie den String wahr zurück, wenn eine beliebige Kombination von Zahlen im Array bis zur größten Zahl im Array addiert werden kann. Andernfalls geben Sie den String false zurück. Zum Beispiel: wenn arr [4, 6, 23, 10, 1, 3] enthält, sollte die Ausgabe wahr sein, weil 4 + 6 + 10 + 3 = 23. Das Array wird nicht leer sein, wird nicht alle die gleichen Elemente enthalten, und kann negative Zahlen enthalten.

Hier ist meine Lösung.

%Vor%

print ArrayAddition ([2,95,96,97,98,99,100])

Ich bin mir nicht einmal sicher, ob das richtig ist, aber es scheint alle Zahlen zu erfassen, die ich anschließe. Ich frage mich, ob es einen besseren Weg gibt, diesen Algorithmus zu lösen, von dem ich nichts weiß. Ich denke, dass eine innerhalb einer für eine Schleife, etc, den Trick tun würde, aber ich weiß nicht, wie das geht.

Was ich im Sinn habe, bewerkstellige dies mit A + B, A + C, A + D ... A + B + C ... A + B + C + D + E

z.B.)

%Vor%

Ich habe überall gesucht und den Vorschlag von itertool gefunden, aber ich frage mich, ob es eine Möglichkeit gibt, diesen Code roher zu schreiben.

Danke.

    
user3015876 06.12.2013, 05:45
quelle

6 Antworten

4

Eine rekursive Lösung:

%Vor%

Die GetSum-Funktion gibt False zurück, wenn die erforderliche Summe ungleich Null ist und keine Elemente im Array vorhanden sind. Dann prüft es auf 3 Fälle:

  1. Wenn die erforderliche Summe, n, Null ist, dann wird das Ziel erreicht.
  2. Wenn wir die Summe mit den verbleibenden Artikeln erhalten, nachdem der erste Artikel entfernt wurde, wird das Ziel erreicht.
  3. Wenn wir die erforderliche Summe abzüglich des ersten Elements der Liste auf dem Rest der Liste erhalten, wird das Ziel erreicht.
perreal 06.12.2013, 05:55
quelle
2

Ihre Lösung funktioniert nicht.

%Vor%

Die einfache Lösung besteht darin, itertools zu verwenden, um über alle Teilmengen der Eingabe zu iterieren (die nicht die größte Zahl enthalten):

%Vor%

Wenn Sie Itertools vermeiden möchten, müssen Sie Subsets direkt generieren. Dies kann erreicht werden, indem man in binär zählt und die gesetzten Bits verwendet, um zu bestimmen, welche Elemente ausgewählt werden sollen:

%Vor%     
user2357112 06.12.2013 05:53
quelle
0

Update: Ich habe vergessen, dass Sie alle möglichen Kombinationen überprüfen möchten. Verwenden Sie stattdessen:

%Vor%

Einzeilige Lösung:

%Vor%

Hoffe, das hilft!

    
aIKid 06.12.2013 05:52
quelle
0

Generiere alle Summen des Powersets und teste sie gegen das Maximum

%Vor%

Sie können dies verbessern, indem Sie eine Vorverarbeitung durchführen - suchen Sie zuerst das Maximum und entfernen Sie es von L

    
John La Rooy 06.12.2013 06:10
quelle
0

Ein weiterer Weg, es zu tun ...

Code:

%Vor%

Ausgabe:

%Vor%

Hoffe das hilft ..:)

    
Sravan K Ghantasala 06.12.2013 06:24
quelle
0

Wenn ich die Frage richtig verstanden habe, sollte das einfach zurückgeben, was Sie wollen:

%Vor%     
VIKASH JAISWAL 06.12.2013 06:37
quelle

Tags und Links