Группы элементов, состоящие из нечетного количества нулей, замените на один нулевой элемент - C (СИ)
Формулировка задачи:
Группы элементов, состоящие из нечетного количества нулей, замените на один нулевой элемент, а из четного - на два.
Помогите, в чем ошибка. Вот код:
#include <stdio.h> #include <malloc.h> #include <stdlib.h> int main(void) { int *a; int i, n, count=0; printf("Vvedite razver massiva:\n"); scanf("%d", &n); a = (int*) malloc(n*sizeof(int)); for (i=0; a[n], i<n; i++) { printf("Vvedite a[%d] = \n", i); scanf("%d", &a[i] ); } for (i=0; i<n; i++) if (a[i]==0) { count ++;{ if (count%2==0 ) a[i]= 00; else (a[i]=0); } } for (i=0; i<n; i++) { printf("%d ", a[i]); } free(a); getchar(); getchar(); return 0; }
Решение задачи: «Группы элементов, состоящие из нечетного количества нулей, замените на один нулевой элемент»
textual
Листинг программы
#include <stdio.h> int array_repzero(int* a, int n){ int p, k, j, i = 0, m = n - 1; while(i < m){ if((a[i] == 0) && (a[i] == a[i + 1])) break; ++i; } for(m = n, j = i; j < n; a[i] = a[j]){ p = j; while((p < n) && (a[p] == 0)) ++p; if((k = (p - j)) > 2){ m -= k; k = (k & 1) ? 1 : 2; m += k; while(k-- > 0) a[i++] = a[j++]; j = p; continue; } else ++i; if(++j >= n) break; } return m; } int main(void){ int i; int a[] = { 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0 }; int n = sizeof(a)/sizeof(a[0]); n = array_repzero(a, n); for(i = 0; i < n; ++i) printf("%d ", a[i]); return 0; }
Объяснение кода листинга программы
Вывод: Код предназначен для замены групп элементов, состоящих из нечетного количества нулей, на один нулевой элемент. Список действий:
- Входные данные: массив a и его размер n.
- Начальные установки: счетчик i = 0, m = n - 1.
- Цикл while: проверка условия, если текущий элемент равен нулю и следующий элемент также равен нулю, то цикл прерывается.
- Увеличение счетчика i.
- Цикл for: инициализация счетчика m = n, j = i; затем копирование элементов с j на i.
- Проверка условия: если текущий элемент равен нулю и следующий элемент также равен нулю, то удаляется элемент с индексом i и пропускается один элемент.
- Увеличение счетчика m.
- Увеличение счетчика j.
- Если j >= n, то цикл прерывается.
- Возврат значения m.
- Вывод: элементы массива 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} заменяется на один нулевой элемент.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д