Преобразовать массив, увеличив каждую его серию на один элемент - 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;
}
Объяснение кода листинга программы
В этом коде:
- Увеличивается каждая серия массива на один элемент.
- Если серия в массиве повторяется, то она пропускается.
- Если размер массива достигает максимального значения, то увеличение серии прекращается.
- В конце выводится получившийся массив.