Задача переведена с английского. 2. Секретарь Jeniffer Дженифер, наш секретарь, пошел в офис сегодня поздно, и срочно нужно, чтобы сэкономить время, чтобы иметь ужин, но она нуждается в N копий одного и того же документа. Есть два Xerox, один из которых копирует список бумаги для х секунд, а другой - на у секунд. (Вы можете использовать одну машину Xerox, или оба одновременно. Вы можете не только копировать с оригинала, но и использовать копию.) Для того, чтобы помочь ей выяснить, что это минимальное время, которое потребуется. Входные данные Функция должна принимать три целых числа: N, х и у Выходные данные Функция должна возвращать одно целое число - минимальное время в секундах, необходимое для получения N копий. Пример1: N = 4 х = 1 у = 1 Результат: 3 Example2: N = 5 х = 1 у = 2 Результат: 4
Может на английском кому то понятнее будет. Я уже голову сломал. 2. Secretary Jeniffer Jenifer, our secretary, went to the office late today, and it is urgently necessary to save time to have a dinner, but she needs N copies of the same document. There are two Xerox, one of which copies the list of paper for x seconds, and the other one - for y seconds. (You may use one Xerox machine, or both at the same time. You can not only copy from the original, but also use a copy.) To help her to find out what is the minimum time it will take. Input data Function should receive three integers: N, x and y Output data Function should return a single number - the minimum time in seconds required for the preparation of N copies. Example1: N = 4 x = 1 y = 1 Result: 3 Example2: N = 5 x = 1 y = 2 Result: 4
Ну ты по-русски объясни, как ты будешь копировать, потом посмотри, сколько это времени займёт, потом переведи в блоксхему, потом уже на PHP-е. Задача к PHP малое отношение имеет, на самом деле.
You may use one Xerox machine, or both at the same time Бедняжка Дженифер должна распараллелировать процесс, одна рука на один ксерокс? Или как? You can not only copy from the original, but also use a copy И что даёт эта фраза к задаче? Потерю время на перекладывание оригинала и копии? Но не понимаю в чём сложность задачи? По-моему всё как воздух горы Тянь-Шань прозрачно.
не понял про "лист бумаги за Х секунд" :/ ну так чем меньшее количество времени будет затрачиваться на лист бумаги, тем быстрее она отксерит нужное количество. по-моему, я что-то не так понял... --- Добавлено --- з.ы. автор, русский перевод ужасен, имеет смысл оставить только оригинал. имхо --- Добавлено --- тут тоже не догнал. стартуем: 1 оригинал и 0 копий 1 секунда: имеем 2 копии 2 секунда: имеем 4 копии или соль в том, что работа происходит не параллельно?
@igordata, ок! N = 5 x = 1 y = 2 Result: 4 Она сканирует 1 копию на x - 1 сек Потом + 2 на x и 1 на y за 2 сек И тут вопрос: поскольку y работает медленнее, должна ли она успеть отсканировать на x еще одну копию? Если да, то за 3 секунды будет отсканировано 4 копиии
сам и отвечу Код (Text): (n-1)*(x+y)/4 результат округляем к большему целому, и прибавляем минимальное между х или у
Если N = 2 x = 1 y = 2 то задействовать второй нет смысла. То же при любых экстремальных числах (y = 65535).
мне кажется, что имеет смысл выразить более медленный через более быстрый. И должна получиться тупо формула линейного уравнения с округлением вверх.
Q = 1/x + 1/y = суммарная производительность t = N/Q округлять следует в большую сторону Код (Text): $t = ceil($N / (1 / $x + 1 / $y));
Проверьте, вроде вот оно... И должно пахать PHP: function express_xerox_copy($N, $y, $x) { if ($x<$y) { $Nx_All_time = $N * $x; $t = $y; $_t = $x; } else if ($y<$x) { $Nx_All_time = $N * $y; $t = $x; $_t = $y; } elseif ($y==$x) { if($N%2 == 0) { $all_res_time = $N/2 * $x; return $all_res_time; } else { $all_res_time = floor($N/2) * $x; $all_res_time += $x; return $all_res_time; } } $all_res_time = 0; $time2 = $t; for ($i=0; $i<$N; $i=0) { $N = $N-1; $all_res_time += $_t; if($time2 <= $Nx_All_time) { $N = $N-1; $time2 += $t; $Nx_All_time = $N*$_t; } } return $all_res_time; } --- Добавлено --- Всё вот алгоритм сто пудов работающий --- Добавлено --- PHP: echo express_xerox_copy(50, 10, 5); // при вводе таких данных я получил результат: 185 --- Добавлено --- PHP: // При вводе таких данных: echo express_xerox_copy(10, 6, 3); // Получил результат 21 :) Всё верно товарищи))) // я написал скрипт который может расчитать работу принтеров :)))
askanim, у тебя неправильно считает даже для простейшего случая (4,1,1) что говорить про более сложные)
@runcore да ну докажи --- Добавлено --- @runcore вот у меня показывает 2 секунды скрипт --- Добавлено --- @runcore значит считает правильно!
а что тут доказывать. распиши словами алгоритм для этого простого случая. сразу увидишь что 2 секунды это неправильно)