Заменить каждую серию массива, длина которой меньше L, на один элемент с нулевым значением - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите в решении следующей задачи, пожаалуйста
Дано целое число L (> 1) и целочисленный массив размера N.
Заменить каждую серию массива, длина которой меньше L,
на один элемент с нулевым значением.
Серия — группа подряд идущих одинаковых элементов.
Длина серии может быть равна 1.
Решение задачи: «Заменить каждую серию массива, длина которой меньше L, на один элемент с нулевым значением»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int Action(int *F, int *R, int n, int l)
{
int i,j,o,count,c,p;
int *T;
T=(int *) calloc(n, sizeof(int));
p=F[0];
count=1;
j=1;
o=0;
while (1)
{
if (j >= n) break;
c=F[j];
if (c==p)
count++;
else
{
if ((count < l) && (count > 1))
R[o++]=0;
else
for (i=1; i<=count; i++) R[o++]=p;
count=1;
}
p=c;
j++;
}
if ((count < l) && (count > 1))
R[o++]=0;
else
for (i=1; i<=count; i++) R[o++]=p;
/* освободим неиспользованную память */
realloc(R,o*sizeof(int));
return o;
}
int main(int argc, char *argv[])
{
int *A,*B;
int n,l,i,k;
n=10;
l=3;
A=(int *) calloc(n,sizeof(int));
B=(int *) calloc(n,sizeof(int));
A[0]=1;
A[1]=1;
A[2]=2;
A[3]=3;
A[4]=4;
A[5]=4;
A[6]=4;
A[7]=5;
A[8]=5;
A[9]=5;
k=Action(A,B,n,l);
for (i=0; i<k; i++) printf("%d ",B[i]);
printf("\n");
free(A);
free(B);
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
- В функции
Actionидет поиск серий элементов в массивеFи замена их на один элемент с нулевым значением в массивеR. - Переменная
Tиспользуется для временного хранения данных. - Переменная
pхранит первый элемент серии. - Переменная
countотслеживает количество элементов в серии. - Переменная
oиспользуется для отслеживания индекса элемента в массивеR. - Если серия в массиве
Fне является одиночным элементом, то она заменяется на один элемент с нулевым значением в массивеR. - Если серия в массиве
Fсостоит из одного элемента, то этот элемент повторяется в массивеRдо тех пор, пока не будет достигнута длина серииl. - Если серия в массиве
Fсостоит из более чем одного элемента, то все ее элементы заменяются на один элемент с нулевым значением в массивеR. - В конце функции
Actionосвобождается неиспользованная память. - В функции
mainсоздаются два массиваAиBдля хранения исходных и измененных данных соответственно. - Массив
Aзаполняется исходными данными. - Функция
Actionвызывается для изменения данных в массивеB. - Результат выводится на экран.
- Массивы
AиBосвобождаются от данных. - Программа завершается.