Python
Помогите, срочно Задача Python
Сколько пар соседних элементов в массиве удовлетворяет условию, что левый элемент пары меньше правого, а произведение пары является чётным числом
Попробуй так:
Другой пример:
А если ввести такое:
А по коду:
pairwise преобразует последовательность в последовательность пар соседних элементов.
Фильтруем в ней только те пары, где первый элемент меньше второго (вот здесь не хватает функции starfilter, прямо хоть самому её пиши).
starmap передаёт в указанную функцию кортежи, распакованные в отдельные элементы (например, для кортежа (5, 6) будет вызвано целочисленное побитовое умножение int.__and__(5, 6) или попросту 5 & 6).
Почему используем побитовое умножение, а не обычное? Потому что нам надо проверить только младший бит произведения (= его остаток от деления на 2), а он зависит только от младших битов множителей. И побитовое умножение быстрее полноценного.
А дальше выделяем этот самый младший бит, инвертируем его (так что для чётных чисел в последовательности будет 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))
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)
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)
Пусть дан массив из 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
Вот реализация данного алгоритма на 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)
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)
Школа Каленовская
Спасибо, а можно немного объяснить, что тут делается?
Похожие вопросы
- Помогите решить задачу python
- Информатика, помогите с задачей python 8класс
- Помогите решить задачу Python,очень нужно
- Помогите решить задачу. python
- Помогите, пожалуйста, решить задачу Python
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- СРОЧНО!!! Задача на python: "bf--"
- Срочно помогите с задачей на Python!!!
- Задача python срочно нужно помочь решить
Что-то такое
s=int(input())