Gegeben ein array von ganzen zahlen, finden die GRÖßTE Zahl mit den Ziffern der Reihe, so dass es durch 3 teilbar

E. g.: Array: 4,3,0,1,5 {Anzunehmen, dass alle Ziffern sind >=0. Auch jedes element im array entspricht einer Ziffer. d.h. jedes element im array wird zwischen 0 und 9. }

In der obigen array die größte Zahl ist: 5430 {mit Ziffern 5, 4, 3 und 0 aus dem array}

Mein Ansatz:

Für die Teilbarkeit durch 3, müssen wir die Summe der Ziffern ist teilbar durch 3.
So,

  1. Schritt 1: Entfernen Sie alle Nullen aus dem array.
  2. Schritt 2: Diese Nullen kommen an das Ende. {Da Sie keinen Einfluss auf die Summe, und wir finden, die größte Zahl}
  3. Schritt 3: Finden Sie die Teilmenge der Elemente des Arrays (ohne Nullen), so dass die Anzahl der Ziffern ist MAXIMAL und auch, dass die Summe der Ziffern ist MAXIMAL und die Summe ist durch 3 teilbar.
  4. SCHRITT 4: Die erforderliche Ziffer besteht aus den Ziffern in der obigen Ergebnismenge in absteigender Reihenfolge.

So, der wichtigste Schritt ist SCHRITT 3, d.h. Wie finden Sie die Teilmenge, so dass es enthält die MAXIMAL mögliche Anzahl von Elementen, so dass Ihre Summe ist MAX und ist durch 3 teilbar .

Ich dachte, vielleicht Schritt 3 getan werden könnte, die von GIERIGEN WAHL unter all den Elementen und halten Sie zum entfernen des kleinsten Elements im set, bis die Summe ist durch 3 teilbar.

Aber ich bin nicht davon überzeugt, dass dieser GREEDY-Wahl funktioniert.

Bitte sagen, ob mein Ansatz richtig ist.
Wenn es so ist, dann bitte vorschlagen, wie zu tun, Schritt-3 ?

Bitte auch vorschlagen, andere möglich/effizienten Algorithmus.

Was ist mit brute-force zu generieren, die Möglichkeiten ? Das ist generatif alle die Kombination, die durch 3 teilbar, und nehmen Sie dann die größte ?
Schritt 3 ist ein bisschen ähnlich wie subset-sum-problem, aber es riecht auch einfacher (so könnte es sein solveable polynomially, nachdem alle). Aber ich bezweifle, gierig wird hier zu arbeiten.
Ja, Brute-Force ist immer eine option. Aber ich war hinking, wenn es getan werden könnte, in der einige effiziente Weg.
Wenn wir die Teilmenge-Summe Ansatz, dann müssen wir betrachten alle vielfachen von 3: 3, 2*3, 3*3, 4*3 .. und so weiter... Also ich denke, dass würde sich dann exponential nur.
Hier ist meine Idee : entfernen Sie die Nullen, werden Sie am Ende Hinzugefügt, wie du gesagt hast. N nicht-null-Ziffern bleiben Sie dann generieren Sie alle Möglichkeiten mit der maximalen Länge N. wenn Sie etwas finden, nehmen Sie den maximalen Wert. Vielleicht Sortieren die Ziffern in absteigender Reihenfolge schneller sein können. Wenn Sie nicht etwas finden, suchen Sie für alle Möglichkeiten, die mit der Länge N-1, und so weiter, bis Sie etwas finden.

InformationsquelleAutor user1599964 | 2012-09-19

Schreibe einen Kommentar