2017-05-21 6 views
0

Wie kann ich alle Produkte eines Arrays berechnen und zwei Produkte für jede Kombination zurückgeben?Holen Sie sich alle Produkte eines Arrays

Array:

[2, 2, 3, 4] 

Ausgang:

1, 2*2*3*4 
2, 2*3*4 
2*2, 3*4 
2*2*3, 4 
2*2*4, 3 
2*3, 2*4 

Ich hoffe, meine Ausgabe alle von ihnen enthält. Irgendwelche Ideen, Pseudocode, Code sind willkommen.

+2

warum erscheinen '2 * 3, 2 * 4' und' 2 * 4, 2 * 3' beide im Ausgang, aber '2 * 2, 3 * 4' ist da, während' 3 * 4, 2 * 2' ist nicht? –

+0

@lazydog es war ein Fehler, sorry. – user2502761

+0

Sie könnten einfach die Zahlen von 0 bis 2^n aufzählen und ihre binäre Darstellung verwenden, um zu bestimmen, welche Zahlen in die erste und welche in das zweite Produkt eingehen, und eine Menge verwenden, um Dubletten auszusondern. –

Antwort

3

Da einige der Faktoren wiederholt werden, müssen Sie ihre Multiplizitäten berücksichtigen, um die Wiederholung einiger Produkte zu vermeiden.

Das Array bei Bedarf sortieren und die Multiplizitäten zählen (aufeinander folgende gleiche Werte).

Dann, unter der Annahme k distinkte Werte mit jeweiligen Multiplizitäten Mk, emulieren Sie k verschachtelte Schleifen, jeweils von 0 bis einschließlich Mk. Betrachten Sie für diese Emulation ein Array von Zählern, die alle auf 0 initialisiert sind. Dann inkrementieren Sie den ersten Zähler und wenn er seinen Maximalwert erreicht hat, setzen Sie ihn zurück und tragen Sie ihn zum nächsten Zähler. Wenn der nächste Zähler sein Maximum erreicht, setzen Sie ihn zurück und übertragen Sie ihn zum nächsten ...

Verwenden Sie diese Zähler als Exponenten der Faktoren und berechnen Sie das Produkt. Die zweite Zahl ist das Produkt aller Faktoren geteilt durch die erste Zahl.

z.

Values:   2, 3, 4 
Multiplicities: 2, 1, 1 

Counters: 
    000 
    100 
    200 
    010 
    110 
    210 
    001 
    101 
    201 
    011 
    111 
    211 

First numbers: 
    1 
    2 
    2² 
    3 
    2.3 
    2²3 
    4 
    2.4 
    2²4 
    3.4 
    2.3.4 
    2²3.4 

Second numbers = 2²3.4/First numbers 

Die Gesamtzahl der Produktpaar gleich das Produkt der Multiplizitäten plus eins, (M1 + 1) (M2 + 1) ... (Mk + 1).

+0

Es scheint, dass OP nicht sowohl A, B und B, A produzieren will. Dies könnte erreicht werden, indem sichergestellt wird, dass A <= B (lexikografisch, nicht als Produkt), was die Aufzählungsstrategie geringfügig ändert. – rici

+0

@rici: Kannst du irgendein Paar A, B/B, A in meiner Aufzählung erkennen? –

+0

Erste Nummer: 1 zweite Nummer 2 2 3 4/erste Nummer 2 2 3 4 zweite Nummer 1. Basierend auf Ihrer Aufzählung und der Formel, die Sie für die Berechnung zweiter Zahlen bereitstellen. – rici

Verwandte Themen