Заменить каждую серию массива, длина которой меньше 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;
}

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

  1. В функции Action идет поиск серий элементов в массиве F и замена их на один элемент с нулевым значением в массиве R.
  2. Переменная T используется для временного хранения данных.
  3. Переменная p хранит первый элемент серии.
  4. Переменная count отслеживает количество элементов в серии.
  5. Переменная o используется для отслеживания индекса элемента в массиве R.
  6. Если серия в массиве F не является одиночным элементом, то она заменяется на один элемент с нулевым значением в массиве R.
  7. Если серия в массиве F состоит из одного элемента, то этот элемент повторяется в массиве R до тех пор, пока не будет достигнута длина серии l.
  8. Если серия в массиве F состоит из более чем одного элемента, то все ее элементы заменяются на один элемент с нулевым значением в массиве R.
  9. В конце функции Action освобождается неиспользованная память.
  10. В функции main создаются два массива A и B для хранения исходных и измененных данных соответственно.
  11. Массив A заполняется исходными данными.
  12. Функция Action вызывается для изменения данных в массиве B.
  13. Результат выводится на экран.
  14. Массивы A и B освобождаются от данных.
  15. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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