Найти серию подряд идущих элементов - 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; }
Объяснение кода листинга программы
- В функции
skip_equals
происходит пропуск элементов в заданном диапазоне, которые равны начальному значению. - В функции
output_length_seqs
происходит обход массива с помощью циклаwhile
. - На каждой итерации вызывается функция
skip_equals
, которая возвращает указатель на следующий элемент в последовательности. - Разница между
begin
иend_cur_seq
дает длину текущей последовательности. - Значение
*begin
и длина последовательности выводятся на экран. - Указатель
begin
обновляется, чтобы начать следующую последовательность с текущего элемента. - В функции
main
создается массивarray
, заполненный значениями для тестирования. - Функция
output_length_seqs
вызывается с массивомarray
и его размером в байтах.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д