Проверить числовой ряд на чередование знака

Программа запрашивает число n. Далее, мы вводим n чисел и сохраняем все введенные числа в массив. Программа должна проверить чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести YES, иначе NO.

Ввод:
6
2 -8 1 5 3 22
Вывод:
NO

Ввод:
6
1 -2 2 -4 3 -20
Вывод:
YES

Не могу понять как прописать это в условие - "чередуются ли в нем положительные и отрицательные числа".


Ответы (3 шт):

Автор решения: ПИТОНИСТ версия-3-8

Приведу алгоритм, код напишите сами:

  • если 0 в списке, то сразу пишем NO
  • i идёт от 0 до (длины списка - 1):
    • если i-ый элемент, делённый на i+1 элемент больше нуля, то пишем NO и выходим из цикла
  • если мы не писали NO, то пишем YES

если мы не писали NO, то пишем YES

Это вы можете сделать с помощью флажка с логическим значением

→ Ссылка
Автор решения: XFaost
def check_num(num, next_is_negative):
    if next_is_negative and num < 0:
        return True
    elif not next_is_negative and num > 0:
        return True
    return False

def is_alternates(l):

    # Смотрим каким должно быть второе число
    # Если первое больше 0, то второе должно быть меньше и наоборот
    next_is_negative = l[0] > 0

    for i in range(1, len(l)):
        num = l[i]
        if not check_num(num, next_is_negative):
            return False
           
        # Теперь у следующего числа должен быть противоположный знак
        next_is_negative = not next_is_negative
            
    return True


l = [6, 2, -8, 1, 5, 3, 22]
print(is_alternates(l)) # False
l = [-6, -2, 8, -1, -5, -3, -22]
print(is_alternates(l)) # False
l = [6, -2, 8, -1, 5, -3, 22]
print(is_alternates(l)) # True
l = [-6, 2, -8, 1, -5, 3, -22]
print(is_alternates(l)) # True
→ Ссылка
Автор решения: Gemini
a = []

n = int(input())

for i in range(n):
    a.append(int(input()))

a = [abs(x) for x in a]
b = set(a)

if len(a) == len(b):
    print('NO')
else:
    print('YES')
→ Ссылка