Группы элементов, состоящие из нечетного количества нулей, замените на один нулевой элемент - 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} заменяется на один нулевой элемент.