Visualizzazione dei risultati da 1 a 10 su 33

Visualizzazione discussione

  1. #11
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    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!
    Ultima modifica di minomic; 20-11-2015 a 19:49

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.