Преобразовать массив, увеличив каждую его серию на один элемент - C (СИ) (71034)

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

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

Дан массив, состоящий из n элементов. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии — количество этих элементов (длина серии может быть равна 1). Преобразовать массив, увеличив каждую его серию на один элемент.

Решение задачи: «Преобразовать массив, увеличив каждую его серию на один элемент»

textual
Листинг программы
#include <stdio.h>
 
int array_seqadd(int a[], int n, int maxsize){
    int i, j, l;
    for(i = 0; i < n; i = j, ++n){
        j = i + 1;
        while((j < n) && (a[j] == a[i]))
            ++j;
        
        if(n >= maxsize)
            break;
 
        for(l = n; l > i; --l)
            a[l] = a[l - 1];
        ++j;
    }
    return n;
}
 
int main(void){
    int a[32] = { 0,0, 1, 2,2, 3,3,3, 4, 5, 7,7 };
    int i, n  = 12;
 
    n = array_seqadd(a, n, sizeof(a)/sizeof(a[0]));
    for(i = 0; i < n; ++i)
        printf("%d ", a[i]);
    return 0;
}

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

В этом коде:

  1. Увеличивается каждая серия массива на один элемент.
  2. Если серия в массиве повторяется, то она пропускается.
  3. Если размер массива достигает максимального значения, то увеличение серии прекращается.
  4. В конце выводится получившийся массив.

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

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