Найти максимальное количество идущих чисел подряд, сумма которых кратна семи - 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы