Ho una serie di elementi:
int[] elem = new int[] {A, B, C};
Ho bisogno di calcolare la somma di TUTTE le combinazioni di quegli elementi, dove solo alcuni degli elementi possono essere selezionati facoltativamente. Userò la notazione:
- {0,1} significa che l'elemento può essere selezionato o meno
- {1} significa che l'elemento è sempre selezionato.
Pertanto, ho bisogno di calcolare il seguente valore, che potrebbe essere qualcosa del tipo:
result = {0,1}*A + {1}*B + {0,1}*C;
Ho provato ad usare nested per loops, in questo modo:
for (int i=0;i<2;i++)
for (int j=1;j<2;j++) // notice I start at 1, not 0, because B is {1}
for (int k=0;k<2;k++)
Console.Write( i*A + j*B + k*C );
Ci sono due problemi con questo:
- Questi loop nidificati sono piuttosto ingombranti
- Il mio esempio ha solo tre elementi, ma la matrice potrebbe essere di qualsiasi dimensione. Ad esempio, se l'array avesse 10 elementi, avrei bisogno di avere 10 cicli annidati anziché tre. Non so cambiare il numero di cicli for in base alla dimensione dell'array.
Come eseguo l'iterazione per ottenere tutti i valori di somma per tutte le combinazioni in una matrice di dimensioni arbitrarie?