Я уже решал эту задачу. Я руками за 5 дней делаю 5 коробок, и на 6-ой день покупаю духовку. Руками и духовкой я делаю 2 коробки в день, за 5 дней - 10 коробок. На 6-ой день я покупаю вторую духовку. Руками и 2-мя духовками я за 5 дней делаю 15 коробок, и на 6-ой день покупаю 3-ью духовку. И так далее. Чтобы купить очередную духовку, я работаю 5 дней, а на 6-ой день ее покупаю, и у меня печенья не остается совсем. То есть, после покупки каждой духовки я начинаю всё с нуля. Главное - понять, когда нужно остановиться покупать духовки и начать уже копить печенье на складе. Итак, подведем итоги: 1) На покупку каждой духовки мы тратим 6 суток и начинаем с нуля. 2) Имея n духовок, мы делаем 584 коробок печенья за trunc(584/(n+1)) + 1 дней, где trunc(x) = [x] - это целая часть x. 3) Всего мы тратим времени T(n) = 6n + trunc(584/(n+1)) + 1 --> min Минимум функции trunc(584/(n+1)) совпадает с минимумом 584/(n+1) T(n) = 6n + 584/(n+1) + 1 --> min T'(n) = 6 - 584/(n+1)^2 = (6(n+1)^2 - 584) / (n+1)^2 = 0 6(n+1)^2 - 584 = 0 (n+1)^2 = 584/6 = 97,33 n + 1 = √97,33 ~ 9,86 = 10 n = 9 Значит, нужно ограничиться покупкой 9 духовок. За 6*9 = 54 дня мы их купим, и за 584/10 ~ 59 дней мы соберем нужное количество коробок на складе. Всего мы истратим 54 + 59 = 113 дней.
// PascalABC.NET 3.3, сборка 1590 от 03.12.2017 // Внимание! Если программа не работает, обновите версию!
procedure Foo(a:array[,] of integer; var kn:integer; var so:real); begin var s:=a.ElementsByRow; // последовательность не хранится kn:=s.Where(t->t<0).Count; so:=s.Where(t->t.IsOdd).Sum end;
begin var z:=MatrRandomInteger(4,3,-50,50); z.Println(4); var k:integer; var s:real; Foo(z,k,s); Writeln('Количество отрицательных: ',k); Writeln('Сумма нечетных по значению: ',s) end.
Пример -40 15 -10 -13 37 -13 32 -39 46 -35 0 -43 Количество отрицательных: 7 Сумма нечетных по значению: -91
Замечание: Во избежании разнотолков указывайте, что понимать под нечетным элементом: нечетный по значению, с нечетным индексом (тогда еще с какого значения начинаются индексы) или нечетный по порядку.
Я руками за 5 дней делаю 5 коробок, и на 6-ой день покупаю духовку.
Руками и духовкой я делаю 2 коробки в день, за 5 дней - 10 коробок.
На 6-ой день я покупаю вторую духовку.
Руками и 2-мя духовками я за 5 дней делаю 15 коробок, и на 6-ой день покупаю 3-ью духовку.
И так далее. Чтобы купить очередную духовку, я работаю 5 дней, а на 6-ой день ее покупаю, и у меня печенья не остается совсем.
То есть, после покупки каждой духовки я начинаю всё с нуля.
Главное - понять, когда нужно остановиться покупать духовки и начать уже копить печенье на складе.
Итак, подведем итоги:
1) На покупку каждой духовки мы тратим 6 суток и начинаем с нуля.
2) Имея n духовок, мы делаем 584 коробок печенья за
trunc(584/(n+1)) + 1 дней, где trunc(x) = [x] - это целая часть x.
3) Всего мы тратим времени T(n) = 6n + trunc(584/(n+1)) + 1 --> min
Минимум функции trunc(584/(n+1)) совпадает с минимумом 584/(n+1)
T(n) = 6n + 584/(n+1) + 1 --> min
T'(n) = 6 - 584/(n+1)^2 = (6(n+1)^2 - 584) / (n+1)^2 = 0
6(n+1)^2 - 584 = 0
(n+1)^2 = 584/6 = 97,33
n + 1 = √97,33 ~ 9,86 = 10
n = 9
Значит, нужно ограничиться покупкой 9 духовок.
За 6*9 = 54 дня мы их купим, и за 584/10 ~ 59 дней мы соберем нужное количество коробок на складе.
Всего мы истратим 54 + 59 = 113 дней.
// Внимание! Если программа не работает, обновите версию!
procedure Foo(a:array[,] of integer; var kn:integer; var so:real);
begin
var s:=a.ElementsByRow; // последовательность не хранится
kn:=s.Where(t->t<0).Count;
so:=s.Where(t->t.IsOdd).Sum
end;
begin
var z:=MatrRandomInteger(4,3,-50,50); z.Println(4);
var k:integer;
var s:real;
Foo(z,k,s);
Writeln('Количество отрицательных: ',k);
Writeln('Сумма нечетных по значению: ',s)
end.
Пример
-40 15 -10
-13 37 -13
32 -39 46
-35 0 -43
Количество отрицательных: 7
Сумма нечетных по значению: -91
Замечание: Во избежании разнотолков указывайте, что понимать под нечетным элементом: нечетный по значению, с нечетным индексом (тогда еще с какого значения начинаются индексы) или нечетный по порядку.