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