Aiuto Problema "ois_biglietti"

Buongiorno ragazzi, ho un problema con la risoluzione di “ois_biglietti”.
il codice mi esce 0/100, e andando ad analizzare i risultati, vedo che quando supera i testcase il tempo di esecuzione è rasente ai 0ms, mentre quando non li supera mi da “execution timed out”, superando il limite di tempo. Non comprendo questa ambiguità: presuppongo il problema sia mio.
Sotto c’è il codice, mi riuscireste ad aiutare?

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

int compra(int N, int M, int A, int B) {
    // Mettete qui il codice della soluzione
    int ans = 0; 
    while(N){
        if(M * A < B){
            ans += M * A; 
            N -= M; 
        }
        else if(M * A > B && N * A > B){
            ans += B; 
            N -= M; 
        }
        else{
            ans += A; 
            N--; 
        }
    }
    
    return ans;
}

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

    fr = fopen("input.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;
}

Sicuramente fai attenzione con while(N), vuol dire while(N != 0) e non while(N > 0), quindi se in uno dei N -= M; fai diventare N negativo il ciclo while non si fermerà.

Grazie mille, ma ho trovato una soluzione, quindi chiudo il forum :slight_smile: