Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите решить задачу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Виликан
4. Морской бой. Параллельно береговой линии в море стоит вражеский флот. Полоса, в которой расположен флот, условно разбита на N квадратов. На главном корабле нашего флота находится секретное орудие, которое может нанести удар сразу по k смежным (т.е. подряд идущим) квадратам. Все вражеские корабли, находящиеся в пораженных квадратах будут уничтожены. К сожалению, у секретного орудия есть всего один заряд, поэтому требуется всего одним выстрелом нанести максимальный урон противнику.
Задание. Напишите программу battle, определяющую максимальное количество кораблей, которое может быть уничтожено одним выстрелом.
Входные данные. В первой строке записаны два целых числа N и k (1<=k<=N< 100000). Во второй строке задаются N целых чисел Ai, каждое из которых определяет количество кораблей в соответствующем квадрате полосы (0 < Ai < 10000).
Выходные данные. В единственной строке выведите наибольшее количество кораблей, которые могут быть уничтожены.
Примеры входных и выходных данных

ввод вывод
7 3 . 1
3212321 .



Добавлено через 1 мин.
если кому лень писать решение, то хоть натолкните на мысль... пожалуйста yes2.gif
Lapp
Цитата(Виликан @ 4.10.2011 16:57) *
если кому лень писать решение, то хоть натолкните на мысль...
Дело не в лени )). Помочь можно, не хочется писать все за тебя.

А какая тут может быть "идея"? Тут все прозрачно..
Сначала считаешь сумму s по первым k квадратам, также присваиваешь ее переменной max. Потом делаешь цикл от i=k+1 до n - вычитаешь из s содержимое i-k квадрата и прибавляешь содержимое i квадрата. Если s больше max, то кладешь s в max. Вот и все.
Виликан
Спасибо большое! Ну для вас это конечно просто и понятно, но мне, человеку который в сумме месяца 3 учит паскаль это не всегда "прозрачно"...
Еще раз спасибо.
Lapp
Нет проблем, заходи еще. Если ты не за готовым решением приходишь - мы поможем.
По сути, то, что я написал выше, годится не только для Паскаля - это алгоритм. На всякий случай пишу то же самое на Паскале - проверь себя:
  s:= 0;
for i:=1 to k do s:= s+a[i];
max:= s;
for i:= k+1 to n do begin
s:= s - a[i-k] + a[i];
if s>max then max:=s
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.