У меня есть двумерный массив. Мне нужно подсчитать количество чётных его элементов и вывести это количество на экран. Как это сделать?
import random
random.seed()
m = input('Количество столбцов > ') # количество столбцов
n = input('Количество строк > ') # количество рядов
M = [[random.randint(-100, 100) for _ in range(eval(m))] for _ in range(eval(n))]
for V in M:
for e in V:
print(e, end=', ')
print()
задан 12 дек 2019 в 20:55
1
import random
random.seed()
m = input('Количество столбцов > ') # количество столбцов
n = input('Количество строк > ') # количество рядов
M = [[random.randint(-100, 100) for _ in range(eval(m))] for _ in range(eval(n))]
for V in M:
for e in V:
print(e, end=', ')
print()
even = 0
for V in M:
for e in V:
if e % 2 == 0:
even += 1
print(even)
P.s. в этом сообществе принято излагать свой вариант решения, каким бы он ни был, чтобы его можно было подправить, а не просить решать задачу за вас
ответ дан 12 дек 2019 в 21:05
ЕвгенийЕвгений
4,4872 золотых знака8 серебряных знаков28 бронзовых знаков
import random
random.seed()
m = input('Количество столбцов > ') # количество столбцов
n = input('Количество строк > ') # количество рядов
M = [[random.randint(-100, 100) for _ in range(int(m))] for _ in range(int(n))]
count = 0
for V in M:
for e in V:
if not e & 1:
count += 1
print(count)
ответ дан 12 дек 2019 в 21:06
asdasd
1,8053 золотых знака13 серебряных знаков27 бронзовых знаков
Ну на коленке как-то так:
import random
def even_values(mtx: list) -> list:
new = []
for row in range(mtx.__len__()):
for col in range(mtx[row].__len__()):
if mtx[row][col] % 2 == 0:
new.append(mtx[row][col])
return new
if __name__ == '__main__':
random.seed()
m = int(input('Количество столбцов > ')) # количество столбцов
n = int(input('Количество строк > ')) # количество рядов
print(even_values([[random.randint(-100, 100) for _ in range(m)] for _ in range(n)]).__len__())
Или без создания самой матрицы:
random.seed()
m = int(input('Количество столбцов > ')) # количество столбцов
n = int(input('Количество строк > ')) # количество рядов
print(sum(1 if random.randint(-100, 100) % 2 == 0 else 0 for _ in range(m * n)))
ответ дан 12 дек 2019 в 21:28
Ole LukøjeOle Lukøje
3,8951 золотой знак9 серебряных знаков33 бронзовых знака
Fnatick 0 / 0 / 1 Регистрация: 15.09.2013 Сообщений: 25 |
||||
1 |
||||
Поиск чётных элементов массива и их вывод08.01.2014, 15:16. Показов 5640. Ответов 3 Метки нет (Все метки)
Дан целочисленный массив размера N. Вывести все содержащиеся в
0 |
RHB 33 / 33 / 17 Регистрация: 27.01.2013 Сообщений: 200 |
||||
08.01.2014, 16:49 |
2 |
|||
1 |
Fnatick 0 / 0 / 1 Регистрация: 15.09.2013 Сообщений: 25 |
||||
09.01.2014, 09:19 [ТС] |
3 |
|||
Спасибо не мог разобраться с обратным циклом
0 |
33 / 33 / 17 Регистрация: 27.01.2013 Сообщений: 200 |
|
09.01.2014, 09:50 |
4 |
Fnatick, а чего там разбираться то?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
09.01.2014, 09:50 |
4 |
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
>>> b = [x for x in a if not x%2]#четные значения из массива
>>> b
[2, 4, 6, 8]
>>> b = [v for k,v in enumerate(a) if not k%2]#четные значения ключей из массива
>>> b
[1, 3, 5, 7]
>>>
>>> list(enumerate(a)) #чтобы понимать как это работает
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]
>>>
Мне кажется решать задачки нужно самому. Но вы почитайте про генераторы массивов.
В обоих случаях использован условный генератор — добавляет элемент если соблюдается условие. Условие это остаток от деления на 2 — если равен нулю то число четное. Инверсия чтобы четные результаты давали True(1) вместо False(0).
Функция enumerate() — очень полезная когда надо получить и элемент массива и его порядковый номер в массиве(ключ).
P.S. Кстати 0 это четный индекс по вашему или нет?
Итак формулировка задачи такова «найти все четные элементы массива, вывести на экран, и подсчитать их количество».
Для начала определим, что такое четное число вообще? правильно, четными числами называются числа, которые делятся на 2 без остатка (иногда еще говорят кратны 2).
Теперь определимся как это реализовать. В паскале есть такой замечательный оператор mod, который нам как раз и необходим. Сей оператор отвечает за деление с остатком, а если быть точнее, применив данный оператор, вы получаете остаток от деления. Например 11 разделить на 2. Использовав mod мы получим в ответе число 1.
11/2 = 5 (остаток 1)
Теперь как это все записать в паскале. Пусть переменная х — это остаток
x := 11 mod 5
Вернемся к нашей задаче, где нас интересует нахождение четных элементов массива. Для ее решения нужно подойти к составлению кода логически .
Каков остаток при делении четного числа на 2? Верно, остаток всегда равен нулю. (Подробнее о четности вы можете прочесть в статье оператор div и оператор mod) То есть нам просто нужно использовать цикл с условием вида
if s[i] mod 2 = 0 then
Ну а теперь код всей задачи (как в помните нам еще было необходимо подсчитать количество четных чисел и вывести их всех на экран)
var i,x,y:integer;s:array [1..10] of integer;
begin
for i:=1 to 10 do
read(s[i]);
for i:=1 to 10 do
if s[i] mod 2=0 then begin
writeln (s[i]);
y:=y+1;
end;
writeln;
writeln(‘количество четных чисел = ‘,y)
end.
Если нужно вывести элементы на четных позициях, то достаточно воспользоваться срезом от начала до конца с шагом 2
l = [0, 1, 2, 3, 4, 5, 6]
l[::2] # [0, 2, 4, 6]
А если нужно вывести элементы четные по значению, то можно собрать новый массив, отфильтровав исходный
l = [3, 2, 5, 7, 1, 8, 0, 11]
[x for x in l if x % 2 == 0] # [2, 8, 0]