CERCALESOMME - gator allenamento

salve, io ho scritto una soluzione per il problema “cercalesomme”, quello della gara di allenamento gator, ma, anche se in locale girava (lo ho guardato) sui casi di input, mi fa solo 10 punti (e il bello è che è il QUARTO caso, quindi di certo non gli esempi)
ora, la mia domanda è: visto che quel problema lo ho risolto trovando tutte le possibilità (e visto che, almeno in teoria, funzionava) non è che il correttore voglia che l’output sia in qualche modo ordinato? se voi avete fatto 100 punti, come lo avete risolto sto problema?
anzi, di più: siccome la soluzione le prova tutte, le prova ovviamente tutte con ordine, ricorsivamente, mentre se guardate il testo l’output non ha nessun ordine (almeno a parer mio, ma fateci caso: nell’ultimo esempio, si passa dall’uno come prima cifra al due poi all’ uno e poi al due, e non è solo quello).

già che ci sono, ne approfitto per chiedere: esiste una soluzione decente? è vero che l’input è al massimo dieci, ma non è comunque bello risolverlo in fattoriale :stuck_out_tongue:

E invece la soluzione è quella. Puoi solo velocizzarla salvandoti in una matrice, nella posizione [i,j], il valore dei numeri dalla cifra i alla cifra j, senza ricalcolarlo più volte.
Comunque non dovrebbe c’entrare l’ordine. Se postassi il tuo codice potremmo vedere cosa c’è che non va nella tua implementazione.

Beh non puoi farlo in meno di così dal momento che ti è richiesto di stampare tutte le combinazioni che soddisfano la condizione e non solo il numero di tali combinazioni :stuck_out_tongue:
In ogni caso come già detto da Lawliet prova a postare il codice che probabilmente ci sarà qualche errore nei casi base!

trolololollll mi ero dimenticato il cout e lo avevo lasciato al posto del file output… ops comunque per la gloria lascio il codice casomai a qualcuno interessasse. scusate comunque :blush:

int cifre[100];
int n;
int vett[100];
int totale;

void verifica()
{
    int somma=0;
    int numero=cifre[1];

    for(int i=2; i<=n; i++)
    {
        if(vett[i-1]==0)
            numero=numero*10 + cifre[i];
        else
        {
            somma=somma+numero;
            numero=cifre[i];
        }

    }
    somma+=numero;

    if(somma==totale)
    {
        for(int i=1; i<n; i++)
            if(vett[i]==1)
                cout<<i<<" ";
        cout<<endl;
    }

}


void rico(int pos)
{
    if(pos>=n)
    {
        verifica();

    }
    else{
    vett[pos]=1;
    rico(pos+1);
    vett[pos]=0;
    rico(pos+1);
    }
}

int main()
{
in>>n;

for(int i=1; i<=n; i++)
{
    in>>cifre[i];
    vett[i]=0;
}

in>>totale;

rico(1);
    return 0;
}