Найти максимальное количество идущих чисел подряд, сумма которых кратна семи - Turbo Pascal
Формулировка задачи:
Привет, господа программисты! Был на олимпиаде, была хорошая задача. Очень хочу разобраться с алгоритмом решения. Звучит примерно так: Есть последовательность чисел, найти максимальное количество идущих подряд, сумма которых кратна семи. Просто перебор конечно же не подойдет, большие ограничения. Ежу понятно, что проще сначала заменить все числа на их остатки от деления на 7. А вот что дальше делать, я не знаю( Прошу помочь.
Решение задачи: «Найти максимальное количество идущих чисел подряд, сумма которых кратна семи»
textual
Листинг программы
var a:array[1..100]of integer; nach,kon,i,n,s,kol,max,sum:integer; begin max:=0; readln(n); kol:=n; s:=0; for i:=1 to n do begin read(a[i]); s:=s+a[i] mod 7; end; if s mod 7=0 then writeln(kol)else begin nach:=1; sum:=s; kon:=n; repeat repeat sum:=sum-(a[kon] mod 7); dec(kon); kol:=kon-nach+1; if sum mod 7 =0 then if kol>max then max:=kol; until (kol<=max); kon:=n; sum:=s-a[nach]mod 7; inc(nach); kol:=kon-nach+1; if sum mod 7 =0 then if kol>max then max:=kol; until kol<=max; writeln(max); end; end.
Объяснение кода листинга программы
Этот код написан на Turbo Pascal и решает задачу поиска максимального количества последовательных чисел, сумма которых кратна семи. Переменные в коде:
- a: массив из 100 целых чисел, которые читаются с консоли.
- n: номер (индекс) последнего элемента массива a.
- kol: переменная для хранения текущего количества чисел, сумма которых кратна семи.
- max: переменная для хранения максимального количества чисел, сумма которых кратна семи.
- sum: переменная для хранения суммы чисел, которые еще не были проверены на кратность семи.
- nach, kon, i, n, s: вспомогательные переменные для обработки чисел в массиве a. Код начинается с инициализации переменных max, sum, nach, kon, i, n и s. Затем происходит чтение n (количество чисел в массиве a) и сохранение его в переменной n. Далее следует цикл for, который проходит по каждому числу в массиве a. Внутри цикла происходит чтение числа из массива a[i], суммирование его с переменной s (которая изначально равна нулю) и проверка, является ли сумма кратной семи (проверка выполняется с помощью оператора mod). Если сумма кратна семи, то обновляется значение переменной max, если текущее количество чисел (которое равно kon) больше max, то max устанавливается равным kon. После этого выполняется повторный расчет суммы (с помощью переменной sum) и обновление значений переменных nach и kon. Затем выполняется проверка, является ли текущее количество чисел (которое равно kon) больше max, и если да, то max устанавливается равным kon. Цикл повторяется до тех пор, пока kon меньше или равно max, и пока сумма кратна семи. Когда это условие выполняется, значение max выводится на экран. В конце кода выполняется повторный расчет суммы (с помощью переменной sum) и обновление значений переменных nach и kon. Затем выполняется повторная проверка, является ли текущее количество чисел (которое равно kon) больше max, и если да, то max устанавливается равным kon.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д