2016-04-02 7 views
-7

Ich habe eine Reihe von 3 ganzen Zahlen {1,2,3}. Ich brauche Kombinationen in Form von-Wierd Kombination

1 1+2 1+3 1+2+3 

2 2+3 

3 


for(int i = 0; i < array.size(); ++i) 
{ 
    for(int j = 0; (i + j) < array.size(); ++j) 
    { 
     sum += my[i + j]; 
     cout << sum << " "; 
     c++;        
    } 
    cout << endl; 
} 

In oben zu drucken, 1+3 übersprungen wird.

Bitte helfen Sie mir dabei.

+0

Was hast du bis jetzt? –

Antwort

0

Gegeben sei eine Menge S power set P (S) ist die Menge aller Teilmengen von S. Was Sie zu tun versuchen, ist im Wesentlichen alle nicht leeren Elemente von x ∈ P (S) aufzulisten. Von dort können Sie über alle Elemente jedes nicht leeren x in P (S) iterieren.

Was bedeutet das für Sie? Für Starter für eine Menge S, die n Elemente enthält, ist die Anzahl der möglichen Elemente von P (S) 2^n, so dass die Größe der Potenzmenge exponentiell mit der Größe ihrer Erzeugungsmenge skaliert.

Aber, wo dies nützlich sein kann für kleine Werte von n (insbesondere n 64) können Sie unsigned long long Variablen verwenden, um als eine Art Index zu fungieren. Insbesondere entspricht jedes Bit einem Ihrer Array-Elemente. Bits mit einem Wert von 0 schließen das zugehörige Element in der Summe aus, während Bits mit einer 1 das Element enthalten. Um etwas zu tun, wie dies versuchen Sie Folgendes:

#include <vector> 
#include <iostream> 

void print_sum(const std::vector<int>& array, unsigned long long i) { 
    int sum = 0; 

    for (int index=0; i > 0; i=i>>1, ++index) { 
     if (i % 2 == 1) { 
      std::cout << array[index] << (i>1 ? "+" : "="); 
      sum += array[index]; 
     } 
    } 
    std::cout << sum << std::endl; 
} 

void printer(const std::vector<int>& array) { 
    if (array.size() < sizeof(unsigned long long) * 8) { 
     unsigned long long n = 1 << array.size(); 
     for (unsigned long long i = 1; i < n; ++i) { 
      print_sum(array, i); 
     } 
    } 
} 

int main(int argc, char** argv) { 
    std::vector<int> sample {1, 2, 3, 4}; 

    printer(sample); 

    return 0; 
} 

Dieses Programm hat Ausgang:

1=1 
2=2 
1+2=3 
3=3 
1+3=4 
2+3=5 
1+2+3=6 
4=4 
1+4=5 
2+4=6 
1+2+4=7 
3+4=7 
1+3+4=8 
2+3+4=9 
1+2+3+4=10