A288

Задача A288

Условие задачи

Даны целые числа [latex]a_{1}[/latex], …, [latex]a_{n}[/latex], каждое из которых отлично от нуля. Если в последовательности отрицательные и положительные члены чередуются (+, –, +, –,  или –, +, –, +, … ), то ответом должна служить сама исходная последовательность. Иначе получить все отрицательные члены последовательности, сохранив порядок их следования.

Код программы

Тесты

 

Входные данные Выходные данные
5 5 3 1 2 7 8 100000
-9 -5 -1 -3 -7 -4198 -852 -9 -5 -1 -3 -7 -4198 -852
5 -3 1 81 3 -7 1 -5 6 -3 -7 -5
-1 2 -8 995 -3 777 -42 -1 2 -8 995 -3 777 -42

Решение

Для решение данной задачи я воспользовался следующим алгоритмом. Заводим два целочисленных вектора, булеву переменную, которую мы будем проверять при печати и целочисленную переменную, которая будет являться первым элементом последовательности, а также начальным значением переменной [latex]tester[/latex], с которой будет сравниваться следующий элемент, а после этого его значение мы снова положим в [latex]tester[/latex].  В ходе цикла мы положительные числа кладем в один вектор, а отрицательные в оба. И в зависимости от того чередовались ли знаки или нет (значение переменной [latex]alternate[/latex]), мы печатаем нужный вектор.

Related Images:

One thought on “A288

  1. Решение принял. Правда предполагался другой алгоритм.
    Все элементы читаются в вектор пока выполняется чередование. Если чередование не нарушено, то это и есть результат. Если чередование нарушено, то удаляются из уже прочитанной части все неотрицательные элементы. При дальнейшем чтении только отрицательные записываются в вектор.
    В этом алгоритме будет одна важная практическая задача — как эффективно удалить часть элементов вектора? Если хотите, можете попытаться разобраться с этим.

    P.S. Как Вы трактуете нулевые элементы? Их нужно просто игнорировать или они нарушают любое чередование?

Добавить комментарий