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