Задача из E-Olymp: минимальная сумма для покупки дисков

Условие задачи:

Чистые компакт-диски продают в трёх видах упаковок. Упаковка из 100 дисков стоит 100 грн., из 20 дисков - 30 грн., а один диск стоит 2 грн. Какую минимальную сумму нужно истратить для покупки n таких дисков?

Вроде бы задача решена, тесты выполняются верно, но e-olymp на все 100% не засчитывает. В чем проблема?

#include <stdio.h>

int main(void) {
    int n;
    scanf("%d", &n);
    printf("%d",( n / 100 * 100 ) + ( n % 100 / 20 * 30 ) + ( n % 100 % 20 * 2));
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Вы не учитываете, что, например, купить 19 дисков - дешевле пачкой за 30 гривен, чем по одному диску по 2 гривны...

Просто и бесхитростно - просто сравниваем варианты...

int main(int argc, char * argv[])
{
    int n;
    cin >> n;

    int d100 = n/100, d20 = n%100/20, d1 = n%20;

    int s = d100*100+d20*30+d1*2;
    int m = d100*100+(d20+1)*30;
    int k = (d100+1)*100;

    if (s > m) s = m;
    if (s > k) s = k;

    cout << s;
}
→ Ссылка