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
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é
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)
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à )
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ì:
- dichiara una variabile massimo e ponila a -1
- 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?
Allora il ciclo finale deve arrivare fino a i<N