Esercizio "easy2" 75/100

Ciao ragazzi, ho fatto l’esercizio "Trova la somma pari massima (easy2) " e anche se il programma funziona perfettamente anche nel tempo di esecuzione e nello spazio occupato, mi assegna 75/100.

Prova a cliccare sul numero della sottoposizione, sulla sinistra, in modo da leggere che errore c’è stato nei casi che hanno fallito :wink:

Grazie del consiglio @wil93. Ci sono 20 risultati di output, di cui solo 5 di essi sono sbagliati, ma non capisco dove sistemare il programma dato che c’è 1 solo output nel codice…

I 20 risultati di output sono relativi a 20 risultati di input diversi: come se usassi il programma 20 volte (con input diversi), per intenderci.
Quindi, su 20 casi, 5 di questi sono sbagliati, ora dobbiamo capire perché :blush:
Puoi postare il codice oppure spiegare la tua idea di soluzione?

int N,a[100000],b[100000],SP[100000],Max,S=0,j=0,i;
FILE *input, *output;

int main()
{
    input = fopen("input.txt","r");
    output = fopen("output.txt","w");
    fscanf(input,"%d",&N);
    for(i=0; i<N; i++) fscanf(input,"%d %d", &a[i], &b[i]);
    for(i=0; i<N; i++)
    {
        S=a[i]+b[i];
        if( (S%2) == 0 )
        {
            SP[i] = S;
            j++;
        }
    }
    if(j==0) fprintf(output,"%i",-1);
    else
    {
    Max=SP[0];
    for(i=1; i<=j; i++) if(SP[i]>Max) Max=SP[i];
    fprintf(output,"%i",Max);
    }
    fclose(input);
    fclose(output);
}

Il ciclo finale controlla una posizione non inizializzata e può causare problemi (cambia da i<=j a i<j) :slight_smile:

@paolo non cambia nulla rispetto a prima. Assegna lo stesso 75/100

Prova a cambiare questo fprintf(output,"%i",-1); in questo fprintf(output,"-1");

Non credo sia li il problema…

Il codice in sé è un pochino contorto, quindi probabilmente hai messo da qualche parte un errore (che non riesco a vedere, in realtà :joy:)
Ad esempio, non capisco come mai l’ultimo ciclo parte da 1
Prova, al posto di salvarti in un vettore tutte le somme e poi cercare la somma massima, a fare una cosa così:

  1. dichiara una variabile massimo e ponila a -1
  2. scorri tutti i valori e se a[i] + b[i] % 2 == 0 && a[i] + b[i] > massimo, sostituisci massimo col nuovo valore trovato

Il ciclo parte da 1 perchè ho messo prima del ciclo che la variabile Max = SP[0] , così la variabile Max ha un valore ben definito ( primo indice ) e nel ciclo controllo se gli altri elementi dell’array sono maggiori di Max. Nel caso in cui SP[i] > Max il maggiore sarà SP[i]. e alla fine di tutto ciò potrò far stampare il maggiore.

Hai ragione, allora non so proprio.
Prova a riscrivere tutto da capo o cambiare qualcosa come ti ho suggerito, a volte è veramente l’unica soluzione

L’errore sta che ti salvi le somme sparse nel vettore. Dovresti sostituire

if( (S%2) == 0 )
{
    SP[i] = S;
    j++;
}

in

if( (S%2) == 0 )
{
    SP[j] = S;
    j++;
}

Teoricamente però il vettore è dichiarato fuori dal main, quindi è tutto inizializzato a 0; quindi, se anche ti salvi le somme sparse (che non è una cosa da fare, lo so bene), che errori potrebbe dare?

1 Mi Piace

Allora il ciclo finale deve arrivare fino a i<N

@paolo 100/100 grazie mille a tutti dell’aiuto ragazzi