В массиве N найти количество чередований знака - C (СИ)

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

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

В массиве N (m) найти количество чередований знака, то есть количество переходов с минуса на плюс и наоборот. Например, в последовательности 0 - 2, 0 - 10, 2 - 1, 0, 0, 3, 2 - 3 четыре чередования (ноль знака не имеет)
Пробовал. Не понимаю...

Решение задачи: «В массиве N найти количество чередований знака»

textual
Листинг программы
#include <stdio.h>
 
int doCnt(const int arr[], int size) {
    int cnt = 0;
    const int* p = arr;
 
    for (; (0 < size) && (*arr == 0); --size, ++arr) { ; }
 
    for (p = arr; (0 < size); --size, ++p) {
        if (*p) {
            cnt += (*arr < 0) ^ (*p < 0);
            arr = p;
        }
    }
 
    return cnt;
}
 
int main() {
    int arr[] = {0, -2, 0, -10, 2, -1, 0, 0, 3, 2, -3};
 
    printf("cnt = %d\n", doCnt(arr, sizeof(arr) / sizeof(*arr)));
 
    return 0;
}

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

В данном коде определена функция doCnt(), которая принимает два аргумента: массив arr и его размер size. Функция занимается подсчётом количества чередований знака в массиве. Внутри функции сначала определены две переменные: cnt для подсчёта количества чередований и p для указания на текущий элемент массива. Далее в цикле происходит следующее:

  1. Если размер массива больше 0 и текущий элемент массива равен 0, то происходит инкремент cnt и переход к следующему элементу массива.
  2. Если текущий элемент массива не равен 0, то проверяется его знак и, в зависимости от него, к cnt прибавляется 1 или -1. Затем происходит переход к следующему элементу массива. После прохода по всем элементам массива, функция возвращает значение cnt. В функции main() определён массив arr, содержащий 11 элементов. Далее вызывается функция doCnt(), передавая в неё этот массив и его размер. Результат подсчёта выводится на экран. В данном случае на экран будет выведено число 5, так как в массиве имеются 5 чередований знака (0 < -2 < 0 < -10 < 2).

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


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

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

11   голосов , оценка 4.091 из 5
Похожие ответы