Группы элементов, состоящие из нечетного количества нулей, замените на один нулевой элемент - 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} заменяется на один нулевой элемент.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д