Il vettore binario non lo carichi da input: è noto a priori.
Sì, per partire da destra devi utilizzare gli indici e devi conoscere la dimensione dell'array.
Ogni combinazione corrisponde a una certa somma: tu devi trovare quella minima, ma che sia superiore alla soglia per non far arrabbiare la nonna.
Per facilitarti (spero) ho scritto un po' di codice, che svolge già alcune delle funzioni. Cerca di capirlo bene e soprattutto di completarlo.
codice:
#include <iostream>
#include <cstdlib>
#include <cmath>
/* la dimensione dei due vettori
se non e' fissata a priori, cambia questa parte */
const int size = 5;
/* ci saranno modi migliori per fare questa
cosa, ma questo dovrebbe funzionare */
void prossima_combinazione(int* vettore) {
int pos = size - 1;
while(pos >= 0 && vettore[pos] == 1) {
vettore[pos] = 0;
pos--;
}
if(pos >= 0) {
vettore[pos] = 1;
}
}
void stampa_vettore(int* vettore) {
for(int i=0; i<size; ++i) {
std::cout << vettore[i] << " ";
}
std::cout << std::endl;
}
/* punto chiave: calcola la somma delle portate che corrispondono
a un elemento pari a 1 nel vettore binario */
int somma_portate_da_mangiare(int* portate, int* binario) {
int somma = 0;
for(int i=0; i<size; ++i) {
if(binario[i] == 1) {
somma += portate[i];
}
}
return somma;
}
int main(int argc, char const *argv[])
{
int portate[] = {3, 6, 4, 10, 15};
int soglia = 12;
int binario[] = {0, 0, 0, 0, 0};
/* stampo tutte le combinazioni (con almeno un 1)
tanto per vedere che sia tutto corretto */
for(int i=0; i < pow(2, size) - 1; ++i) {
prossima_combinazione(binario);
stampa_vettore(binario);
}
// TODO
/*
- elimina la stampa sopra
- fai un ciclo
- per ogni combinazione calcoli la somma delle portate
- se e' minore della soglia minima allora la scarti perche'
farebbe arrabbiare la nonna
- se e' maggiore del limite... qui vedi tu!
Consiglio: devi trovare quella piu' piccola ma che sia maggiore del limite!
*/
return 0;
}
Disclaimer: l'ho scritto molto al volo, quindi non escludo errori, anche enormi. Se lo usi (e lo consegni all'insegnante) lo fai sotto la tua responsabilita!