Задача 1. Арифметическая прогрессия
Васе дали задание: в заданной последовательности чисел найти три подряд идущих числа, образующих возрастающую арифметическую прогрессию. Вася решил написать программу, которая выводила бы тройку чисел, образующих возрастающую арифметическую прогрессию.
Помоги Васе написать такую программу.
Формат ввода
В первой строке входного файла записано натуральное число N (3 ≤ N ≤ 1 000 000). Во второй строке записано N неотрицательных целых чисел через пробел, каждое из которых не превосходит 1 000 000 000.
Формат вывода
В выходной файл выведите три искомых числа. Если ответов несколько, выведите те числа, которые расположены левее. Если таких чисел нет, выведите -1.
Желательно на паскале
Answers & Comments
Verified answer
Храним в памяти 3 последних считанных числа. Для каждой такой тройки проверяем, верно ли, что a[i] - a[i - 1] = a[i - 1] - a[i - 2] > 0. Если это так, выводим тройку, устанавливаем флажок found и выходим из цикла. Если после завершения работы цикла found = false, то тройка не найдена, нужно вывести -1.
В PascalABC.NET тип integer хранит числа до 2 с лишним миллиардов, все числа и разность чисел должны в нем поместиться.
Код (PascalABC.NET 3.4.2.1837):
begin
var values := new integer[3];
var n := readinteger;
(values[1], values[2]) := readinteger2;
var prev_diff := values[1] - values[0];
var found := false;
for var i := 3 to n do begin
values[i mod 3] := readinteger;
var diff := values[i mod 3] - values[(i - 1) mod 3];
if (diff = prev_diff) and (diff > 0) then begin
print(values[(i - 2) mod 3], values[(i - 1) mod 3], values[i mod 3]);
found := true;
break;
end;
prev_diff := diff;
end;
if not found then print(-1);
end.