Python

Помогите, срочно Задача Python

Сколько пар соседних элементов в массиве удовлетворяет условию, что левый элемент пары меньше правого, а произведение пары является чётным числом
Попробуй так:
 from itertools import pairwise, starmap
a = map(int, input().split())
print(sum(map((1).__xor__, map((1).__and__, starmap(int.__and__, filter(lambda t: int.__lt__(*t), pairwise(a)))))))
Пример входных данных:
 1 2 3 4 5 6 
Все пары удовлетворяют условию, так что выведено будет 5.
Другой пример:
 1 2 3 44 5 6 
У всех пар произведение чётно, но 44 > 5, поэтому выведено будет 4.
А если ввести такое:
 1 3 5 7 9 11 
То все произведения нечётны, и будет выведено 0.

А по коду:
pairwise преобразует последовательность в последовательность пар соседних элементов.
Фильтруем в ней только те пары, где первый элемент меньше второго (вот здесь не хватает функции starfilter, прямо хоть самому её пиши).
starmap передаёт в указанную функцию кортежи, распакованные в отдельные элементы (например, для кортежа (5, 6) будет вызвано целочисленное побитовое умножение int.__and__(5, 6) или попросту 5 & 6).
Почему используем побитовое умножение, а не обычное? Потому что нам надо проверить только младший бит произведения (= его остаток от деления на 2), а он зависит только от младших битов множителей. И побитовое умножение быстрее полноценного.
А дальше выделяем этот самый младший бит, инвертируем его (так что для чётных чисел в последовательности будет 1, а для нечётных - 0), и суммируем последовательность из нулей и единиц. Результатом будет искомое количество пар.

Можно разложить этот код на последовательные операции:
 from itertools import pairwise, starmap
a = map(int, input().split())
pwa = pairwise(a)
lta = filter(lambda t: int.__lt__(*t), pwa)
prda = starmap(int.__and__, lta)
evena = map((1).__xor__, map((1).__and__, prda))
print(sum(evena))
Maxim Us
Maxim Us
54 053
Лучший ответ
f=open('Название файла ').readline()
s=[int(i) for i in f]
cnt=0
for x in range(len(s)-1):
if s[x]<s[x+1] and (s[x]*s[x+1])%2==0:
cnt+=1
print(cnt)
Тимур Ходжаев
Тимур Ходжаев
16 653
Школа Каленовская У нас не решается так, либо начинается с input, либо с a=
Что-то такое
Тимур Ходжаев Если у вас вводятся данные вручную, то замените первые две строчки на:
s=int(input())
Пусть дан массив из n элементов. Для каждого i (1 ≤ i ≤ n - 1) проверим, является ли произведение arr[i] * arr[i+1] четным числом, и если да, то проверим, меньше ли arr[i] чем arr[i+1]. Если это так, увеличим счетчик пар на 1. В конце работы цикла вернем счетчик.

Вот реализация данного алгоритма на Python:

def count_pairs(arr): count = 0 for i in range(len(arr)-1): if arr[i] * arr[i+1] % 2 == 0 and arr[i] < arr[i+1]: count += 1 return count

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(count_pairs(arr)) # выводит 14
def count_pairs(array):
count = 0

for i in range(len(array) - 1):
if array[i] < array[i + 1] and (array[i] * array[i + 1]) % 2 == 0:
count += 1

return count

# Пример использования:
my_array = [2, 3, 4, 5, 6]
pairs_count = count_pairs(my_array)
print("Количество пар, удовлетворяющих условию:", pairs_count)
Школа Каленовская Спасибо, а можно немного объяснить, что тут делается?