Задача:
На сковородку одновременно можно положить k блинов. Каждый блин нужно с каждой стороны обжаривать m минут непрерывно. За какое наименьшее время удастся поджарить с обеих сторон n блинов? В отдельных строках вводятся 3 числа: k, m и n.
Иногда встречается похожая задача, но жарят котлеты.
Казалось бы очевидным решение, что например 3 котлеты на сковороде в которую влазять 2 котлеты, если на жарку одной стороны уходит 1 минута, можно поджарить за 4 минуты.
Кладем две котлеты, жарим с одной стороны -1 минута
Переворачиваем, жарим со второй стороны -1 минута (итого 2 минуты)
Убираем готовые котлеты, кладем третью, жарим с одной стороны 1 минуту (итого 3 минуты)
Переворачиваем котлету, жарим со второй стороны 1 минуты (итого 4 минуты).
Но есть более быстрый способ:
кладем две котлеты
жарим 1 минуту
через минуту у нас две котлеты, поджаренные с одной стороны, одна нежареная
переворачиваем одну котлету, вторую вынимаем ,кладем третью
через минуту у нас две котлеты, поджаренные с одной стороны, одна готова
кладем эти две котлеты
и через минуту у нас все три котлеты готовы
100 котлет 200 сторон
200/99=2.02
округляем к ближайшему большему 3
3 подхода по 100 минут =300 минут
Запишем этот алгоритм на С++:
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int k, m, n, t;
scanf("%d %d %d", &k, &m, &n);
if(n>k){
t = n*2/k;
if(n*2%k>0){
t++;
}
t*=m;
}else{
t=m*2;
}
printf("%d", t);
}