Группы элементов, состоящие из нечетного количества нулей, замените на один нулевой элемент - C (СИ)

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

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

Группы элементов, состоящие из нечетного количества нулей, замените на один нулевой элемент, а из четного - на два. Помогите, в чем ошибка. Вот код:
Листинг программы
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4. int main(void) {
  5. int *a;
  6. int i, n, count=0;
  7. printf("Vvedite razver massiva:\n");
  8. scanf("%d", &n);
  9. a = (int*) malloc(n*sizeof(int));
  10. for (i=0; a[n], i<n; i++)
  11. {
  12. printf("Vvedite a[%d] = \n", i);
  13. scanf("%d", &a[i] );
  14. }
  15. for (i=0; i<n; i++)
  16. if (a[i]==0) {
  17. count ++;{
  18. if (count%2==0 ) a[i]= 00;
  19. else (a[i]=0);
  20. }
  21. }
  22. for (i=0; i<n; i++)
  23. {
  24. printf("%d ", a[i]);
  25. }
  26. free(a);
  27. getchar(); getchar();
  28. return 0;
  29. }

Решение задачи: «Группы элементов, состоящие из нечетного количества нулей, замените на один нулевой элемент»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int array_repzero(int* a, int n){
  4.     int p, k, j, i = 0, m = n - 1;
  5.     while(i < m){
  6.         if((a[i] == 0) && (a[i] == a[i + 1]))
  7.             break;
  8.         ++i;
  9.     }
  10.  
  11.     for(m = n, j = i; j < n; a[i] = a[j]){
  12.         p = j;
  13.         while((p < n) && (a[p] == 0))
  14.             ++p;
  15.  
  16.         if((k = (p - j)) > 2){
  17.             m -= k;
  18.             k  = (k & 1) ? 1 : 2;
  19.             m += k;
  20.             while(k-- > 0)
  21.                 a[i++] = a[j++];
  22.             j = p;
  23.             continue;
  24.         } else
  25.             ++i;
  26.  
  27.         if(++j >= n)
  28.             break;
  29.     }
  30.     return m;
  31. }
  32.  
  33. int main(void){
  34.     int i;
  35.     int a[] = { 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0 };
  36.     int n   = sizeof(a)/sizeof(a[0]);
  37.    
  38.     n = array_repzero(a, n);
  39.     for(i = 0; i < n; ++i)
  40.         printf("%d ", a[i]);
  41.     return 0;
  42. }

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

Вывод: Код предназначен для замены групп элементов, состоящих из нечетного количества нулей, на один нулевой элемент. Список действий:

  1. Входные данные: массив a и его размер n.
  2. Начальные установки: счетчик i = 0, m = n - 1.
  3. Цикл while: проверка условия, если текущий элемент равен нулю и следующий элемент также равен нулю, то цикл прерывается.
  4. Увеличение счетчика i.
  5. Цикл for: инициализация счетчика m = n, j = i; затем копирование элементов с j на i.
  6. Проверка условия: если текущий элемент равен нулю и следующий элемент также равен нулю, то удаляется элемент с индексом i и пропускается один элемент.
  7. Увеличение счетчика m.
  8. Увеличение счетчика j.
  9. Если j >= n, то цикл прерывается.
  10. Возврат значения m.
  11. Вывод: элементы массива a через пробел. Пример: Входные данные: a[] = { 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0 } Выходные данные: 0 1 0 0 0 1 0 0 2 0 0 0 7 0 0 0 0 0 0 Объяснение: Код проходит по массиву и ищет группы элементов, состоящих из нечетного количества нулей. Если такая группа найдена, то все элементы этой группы заменяются на один нулевой элемент. В данном примере, группа элементов {0, 0, 0, 0} заменяется на один нулевой элемент.

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


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

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

7   голосов , оценка 4.143 из 5

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

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

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