Errore nelle sottoposizioni

Salve a tutti,
io sto provando a risolvere qualche esercizio di algobadge, in particolare il problema Biglietti a Milano. Ho scritto un pezzo di codice in C++ che fornisce il risultato giusto nei 3 casi di test forniti, ma ogni volta che provo a sottoporlo la piattaforma mi dà 0/100, quindi probabilmente sto sbagliando qualcosa nelle modalità di invio. Questo è esattamente quello che invio:

#include <stdio.h>
#include <assert.h>

int compra(int N, int M, int A, int B) {
int cent;
if(N>=M&&AM>B){
while(N>M){
N-=M;
cent+=B;
}
if(N
A<B)
cent+=NA;
else
cent+=B;
}
else if(N>=M&&A
M<=B)
cent=AN;
else if (N<M&&A
N>B)
cent=B;
else if (N<M&&AN<=B)
cent=A
N;
return cent;
}

int main() {
FILE *fr, *fw;
int N, M, A, B;

fr = fopen("biglietti.input25.txt", "r");
fw = fopen("output.txt", "w");

assert(4 == fscanf(fr, "%d%d%d%d", &N, &M, &A, &B));

fprintf(fw, "%d\n", compra(N, M, A, B));
fclose(fr);
fclose(fw);
return 0;

}

(La struttura del main è esattamente quella fornita negli allegati)
grazie!

Ciao, la tua soluzione non viene compilata perchè usi variabili non dichiarate, in particolare AM, AN e NA. Poi per quanto riguarda la soluzione, qui trovi informazioni utili per risolvere il problema descritto nel testo.

2 Mi Piace

Se il link sopra dovesse essere troppo vago, ti consiglio di leggere anche qui, dove viene affrontato più in dettaglio il caso del problema

2 Mi Piace

Si scusami, nel fare copia-incolla del codice ha cancellato gli asterischi… dove c’è scritto AM sarebbe A*M e così via.
Il problema non è l’algoritmo o la sua compilazione (su due diversi computer con compilatori diversi fornisce il risultato corretto) ma proprio il fatto che non riesco a fare la sottoposizione, perchè ogni volta mi ritorna 0/100.

riesci a mandare per caso il codice in modo che sia più leggibile (indentanto bene e che compila?)
e poi, quanti casi sbaglia?

2 Mi Piace
#include <stdio.h>
#include <assert.h>

int compra(int N, int M, int A, int B) {
    int cent;
    if(N>=M&&A*M>B){
        while(N>M){
            N-=M;
            cent+=B;
        }
        if(N*A<B)
            cent+=N*A;
        else
            cent+=B;
    }
    else if(N>=M&&A*M<=B)
        cent=A*N;
    else if (N<M&&A*N>B)
        cent=B;
    else if (N<M&&A*N<=B)
        cent=A*N;
    return cent;
}

int main() {
    FILE *fr, *fw;
    int N, M, A, B;

    fr = fopen("biglietti.input25.txt", "r");
    fw = fopen("output.txt", "w");

    assert(4 == fscanf(fr, "%d%d%d%d", &N, &M, &A, &B));

    fprintf(fw, "%d\n", compra(N, M, A, B));
    fclose(fr);
    fclose(fw);
    return 0;
}

eccolo, così da pc compila e tutto, ma il problema mi da 0/100

Il problema è con: fr = fopen("biglietti.input25.txt", "r");
che dovrebbe essere: fr = fopen("input.txt", "r");
in questo modo non da più execution killed e da 20/100, l’altro piccolo errore da sistemare per il 100/100 è che non hai inizializzato cent=0.

Ok ora funziona. Grazie infinite