Вопрос задан 09.03.2025 в 11:53. Предмет Информатика. Спрашивает Фирсанова Лиза.

Напишите программу, которая находит в массиве самую длинную цепочку одинаковых элементов. Программа должна вывести значение элемента, который встречается наибольшее число раз подряд, и длину этой цепочки. Если в массиве есть несколько цепочек максимальной длины, нужно вывести данные по первой из них.

Входные данные
Первая строка содержит размер массива N . Во второй строке через пробел задаются N чисел – элементы массива. Гарантируется, что 3 < N≤ 10000 .
Выходные данные
Программа должна вывести два числа через пробел: значение элемента массива, который встречается наибольшее число раз подряд, и длину этой цепочки.

Перейти к ответам

Ответы на вопрос

Отвечает Асадова Айсель.

Для решения задачи необходимо пройти по массиву и найти самую длинную последовательность одинаковых элементов, которая встречается подряд. Если таких цепочек несколько, нужно вернуть данные по первой из них.

Алгоритм решения:

  1. Инициализация переменных:

    • Нам нужно хранить текущий элемент и его количество в подряд идущей цепочке.
    • Также нужно запомнить максимальную длину цепочки и значение элемента, который встречается наибольшее количество раз подряд.
  2. Перебор массива:

    • Мы будем идти по массиву и сравнивать каждый элемент с предыдущим.
    • Если элемент одинаков с предыдущим, увеличиваем счетчик текущей цепочки.
    • Если элемент отличается, сравниваем длину текущей цепочки с максимальной и, если нужно, обновляем максимальную цепочку.
    • После этого начинаем отсчет новой цепочки с текущего элемента.
  3. После завершения перебора:

    • Проверяем последнюю цепочку, так как она может быть самой длинной, и нужно также обновить максимальную длину, если она оказалась самой длинной.
  4. Вывод результата:

    • Выводим значение элемента и длину самой длинной цепочки.

Пример кода:

python
def find_longest_chain(n, arr): # Переменные для хранения информации о максимальной цепочке max_value = arr[0] max_length = 1 # Переменные для текущей цепочки current_value = arr[0] current_length = 1 # Проходим по массиву начиная с 1 элемента for i in range(1, n): if arr[i] == arr[i-1]: # Увеличиваем длину текущей цепочки current_length += 1 else: # Если текущая цепочка длиннее максимальной, обновляем максимальную if current_length > max_length: max_value = current_value max_length = current_length # Сбрасываем счетчики для новой цепочки current_value = arr[i] current_length = 1 # Не забываем проверить последнюю цепочку if current_length > max_length: max_value = current_value max_length = current_length # Выводим результат print(max_value, max_length)

# Чтение входных данных n = int(input()) # Размер массива arr = list(map(int, input().split())) # Массив чисел

# Вызов функции find_longest_chain(n, arr)

Пояснение к коду:

  1. Входные данные:

    • Сначала считываем размер массива n.
    • Затем считываем сам массив arr с помощью map и split, чтобы преобразовать строку в список чисел.
  2. Переменные:

    • max_value и max_length отвечают за текущие максимальные данные о цепочке.
    • current_value и current_length — для отслеживания текущей цепочки одинаковых элементов.
  3. Основной цикл:

    • Мы начинаем с первого элемента и проходим по массиву.
    • Для каждого элемента сравниваем его с предыдущим:
      • Если они одинаковые, увеличиваем счетчик текущей цепочки.
      • Если отличаются, проверяем, была ли текущая цепочка длиннее предыдущей максимальной, и если да — обновляем максимальные значения. Затем начинаем новую цепочку с текущего элемента.
  4. После завершения цикла:

    • Нам нужно обязательно проверить последнюю цепочку, так как она тоже может быть самой длинной.
  5. Вывод:

    • После завершения цикла выводим значения самой длинной цепочки: значение элемента и его длину.

Пример:

Входные данные:

8 1 1 2 2 2 3 3 3

Выходные данные:

2 3

Здесь мы видим, что наибольшая цепочка из одинаковых элементов — это троечка "2", которая встречается 3 раза подряд.

Время работы:

  • Мы проходим по массиву один раз, то есть время работы алгоритма — O(N), где N — размер массива.
  • Это эффективно и подходит для ограничений задачи, где N может быть до 10000.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос