Заменить каждую серию массива, длина которой меньше L, на один элемент с нулевым значением - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите в решении следующей задачи, пожаалуйста Дано целое число L (> 1) и целочисленный массив размера N. Заменить каждую серию массива, длина которой меньше L, на один элемент с нулевым значением. Серия — группа подряд идущих одинаковых элементов. Длина серии может быть равна 1.

Решение задачи: «Заменить каждую серию массива, длина которой меньше L, на один элемент с нулевым значением»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int Action(int *F, int *R, int n, int l)
  5. {
  6.     int i,j,o,count,c,p;
  7.     int *T;
  8.    
  9.     T=(int *) calloc(n, sizeof(int));
  10.  
  11.     p=F[0];
  12.     count=1;
  13.     j=1;
  14.     o=0;
  15.    
  16.     while (1)
  17.     {
  18.          if (j >= n) break;
  19.          
  20.          c=F[j];
  21.          
  22.          if (c==p)
  23.             count++;
  24.          else
  25.          {
  26.             if ((count < l) && (count > 1))
  27.                R[o++]=0;      
  28.             else
  29.                for (i=1; i<=count; i++) R[o++]=p;
  30.             count=1;  
  31.          }  
  32.                  
  33.          p=c;
  34.          j++;
  35.                                
  36.     }    
  37.     if ((count < l) && (count > 1))
  38.        R[o++]=0;      
  39.     else
  40.        for (i=1; i<=count; i++) R[o++]=p;
  41.  
  42.     /* освободим неиспользованную память */
  43.  
  44.     realloc(R,o*sizeof(int));
  45.  
  46.     return o;
  47.    
  48. }        
  49.  
  50. int main(int argc, char *argv[])
  51. {
  52.  
  53.   int *A,*B;
  54.   int n,l,i,k;
  55.  
  56.   n=10;
  57.   l=3;
  58.  
  59.   A=(int *) calloc(n,sizeof(int));
  60.   B=(int *) calloc(n,sizeof(int));
  61.  
  62.   A[0]=1;
  63.   A[1]=1;
  64.   A[2]=2;
  65.   A[3]=3;
  66.   A[4]=4;
  67.   A[5]=4;
  68.   A[6]=4;
  69.   A[7]=5;
  70.   A[8]=5;
  71.   A[9]=5;
  72.  
  73.   k=Action(A,B,n,l);
  74.  
  75.   for (i=0; i<k; i++) printf("%d ",B[i]);
  76.   printf("\n");
  77.  
  78.   free(A);
  79.   free(B);
  80.  
  81.   system("PAUSE"); 
  82.   return 0;
  83. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы