// Tiene un bug a propósito: el caso normal pasa, y el borde no.
#include <assert.h>
#include <stdio.h>

int largest_coin(int cents) {
    if (cents > 500) {
        return 500;
    } else if (cents >= 200) {
        return 200;
    } else if (cents >= 100) {
        return 100;
    } else if (cents >= 50) {
        return 50;
    } else if (cents >= 20) {
        return 20;
    }
    return 10;
}

int coins_needed(int cents) {
    if (cents < 0 || cents % 10 != 0) {
        return -1;
    }

    int coins = 0;
    while (cents > 0) {
        cents = cents - largest_coin(cents);
        coins = coins + 1;
    }
    return coins;
}

int main(void) {
    assert(coins_needed(380) == 5);     // caso normal: 200, 100, 50, 20, 10
    assert(coins_needed(0) == 0);       // el menor monto: no se da ninguna moneda
    assert(coins_needed(10) == 1);      // la moneda más chica
    assert(coins_needed(500) == 1);     // justo una moneda grande
    assert(coins_needed(490) == 5);     // justo debajo de 500
    assert(coins_needed(1000) == 2);    // más de una moneda grande
    assert(coins_needed(15) == -1);     // no es múltiplo de 10
    assert(coins_needed(-10) == -1);    // negativo

    printf("Todas las pruebas pasaron\n");
    return 0;
}
