Помогите, срочно задача python - Общение Python мододелов

Вопрос Помогите, срочно задача python

Регистрация
31 Мар 2013
Сообщения
93
Репутация
0
Спасибо
0
Монет
0
Сколько пар соседних элементов в массиве удовлетворяет условию, что левый элемент пары меньше правого, а произведение пары является чётным числом
 
Регистрация
6 Сен 2013
Сообщения
75
Репутация
0
Спасибо
1
Монет
0
Попробуй так: 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))
 

RED

Capitan

RED

Capitan
Регистрация
2 Дек 2013
Сообщения
99
Репутация
1
Спасибо
0
Монет
0
Пусть дан массив из n элементов. Для каждого i (1 ≤ i ≤ n - 1) проверим, является ли произведение arr * arr[i+1] четным числом, и если да, то проверим, меньше ли arr чем arr[i+1]. Если это так, увеличим счетчик пар на 1. В конце работы цикла вернем счетчик.

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

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

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(count_pairs(arr)) # выводит 14
 
Регистрация
10 Окт 2013
Сообщения
89
Репутация
11
Спасибо
2
Монет
0
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)
 
Регистрация
2 Ноя 2013
Сообщения
70
Репутация
0
Спасибо
0
Монет
0
def count_pairs(array):
count = 0

for i in range(len(array) - 1):
if array < array[i + 1] and (array * 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)
 
Сверху Снизу