Заменить каждую серию массива, длина которой меньше 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
освобождаются от данных. - Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д