Найти серию подряд идущих элементов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан целочисленный массив размером n. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии – количество этих элементов. Вывести на экран длины всех серий данного массива

Решение задачи: «Найти серию подряд идущих элементов»

textual
Листинг программы
//gcc 5.4.0
 
#include  <stdio.h></stdio.h>
 
 
int *skip_equals(int *begin, int *end)
{
    if (begin != end) {
        int val = *(begin++);
        while (begin != end && *begin == val) {
            ++begin;
        }
    }
    return begin;
}
 
void output_length_seqs(int *begin, size_t size)
{
    int *end = begin + size;
    while (begin != end) {
        int *end_cur_seq = skip_equals(begin, end);
        size_t length = end_cur_seq - begin;
        printf("%d - %zu\n", *begin, length);
        begin = end_cur_seq;
    }
}
 
 
int main(void)
{
    int array[] = {1, 5, 3, 4, 4, 5, 5, 5, 2, 2, 1, 1, 3};
    output_length_seqs(array, sizeof(array)/sizeof(*array));
    return 0;
}

Объяснение кода листинга программы

  1. В функции skip_equals происходит пропуск элементов в заданном диапазоне, которые равны начальному значению.
  2. В функции output_length_seqs происходит обход массива с помощью цикла while.
  3. На каждой итерации вызывается функция skip_equals, которая возвращает указатель на следующий элемент в последовательности.
  4. Разница между begin и end_cur_seq дает длину текущей последовательности.
  5. Значение *begin и длина последовательности выводятся на экран.
  6. Указатель begin обновляется, чтобы начать следующую последовательность с текущего элемента.
  7. В функции main создается массив array, заполненный значениями для тестирования.
  8. Функция output_length_seqs вызывается с массивом array и его размером в байтах.

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


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

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

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