Найти тему
Modul school

Интересная задача про блины или котлеты.

Задача:

На сковородку одновременно можно положить 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);

}

Еда
6,93 млн интересуются