Задача из 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;
}