Уведомления

Группа в Telegram: @pythonsu

#1 Март 23, 2018 22:43:39

SalikhovAbd
Зарегистрирован: 2018-01-05
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор элементов массива

Здравствуйте.
Помогите с такой вот задачей:
Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел не делилась на 5 и при этом была минимально возможной. Если получить требуемую сумму невозможно, в качестве ответа нужно выдать 0.
Пример ввода:
1 3 2
2 1 2
2 5 1
1 3 4
6 1 1
Вывод:
6

Не могу никак сообразить, как произвести перебор троек из набора, помогите мне с этим, пожалуйста (остальное не нужно).

Отредактировано SalikhovAbd (Март 23, 2018 22:45:16)

Офлайн

#2 Март 23, 2018 23:05:01

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Перебор элементов массива

 a = '1 3 2'
for x in a.split():
    print(int(x))

Офлайн

#3 Март 23, 2018 23:19:54

SalikhovAbd
Зарегистрирован: 2018-01-05
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор элементов массива

Romissevd
Нет, это не то.

Офлайн

#4 Март 23, 2018 23:19:57

SalikhovAbd
Зарегистрирован: 2018-01-05
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Перебор элементов массива

Romissevd
Нет, это не то.

Офлайн

#5 Март 23, 2018 23:33:26

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Перебор элементов массива

Модуль itertools , а именно его функции для комбинаторики



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Март 27, 2018 00:29:15

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Перебор элементов массива

SalikhovAbd
как произвести перебор троек из набора
преобразуй в двумерный массив
 >>> doc = '''1 3 2
2 1 2
2 5 1 
1 3 4
6 1 1'''
>>> a =[sorted([int(j) for j in i.split()]) for i in doc.split('\n')]
>>> a
[[1, 2, 3], [1, 2, 2], [1, 2, 5], [1, 3, 4], [1, 1, 6]]
>>> a0 = sorted([i[0] for i in a])
>>> a0
[1, 1, 1, 1, 1]
>>> t = sorted([i[1] for i in a] + [i[2] for i in a])
>>> t
[1, 2, 2, 2, 2, 3, 3, 4, 5, 6]
>>> for i in t:
	s= sum(a0)
	if s%5:
		print(a0,s)
		break
	a0[-1] = i
	
[1, 1, 1, 1, 2] 6

Офлайн

#7 Март 27, 2018 11:00:25

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Перебор элементов массива

Это то решение которое ты описал

 >>> st = [(1, 2, 3), (1, 2, 2), (1, 2, 5), (1, 3, 4), (1, 1, 6)]
>>> s = { (x, y, z) for x, _, _ in st for _, y, _ in st for _, _, z in st if sum((x,y,z))%5 }
>>> s
set([(1, 2, 6), (1, 3, 2), (1, 1, 6), (1, 2, 3), (1, 3, 5), (1, 1, 4), (1, 2, 4), (1, 3, 4), (1, 1, 5), 
(1, 1, 2), (1, 2, 5), (1, 3, 3)])
>>> min(s, key=sum)
(1, 1, 2)
>>> sum(min(s, key=sum))
4
А это так как ты хочешь
 >>> st = [(1, 2, 3), (1, 2, 2), (1, 2, 5), (1, 3, 4), (1, 1, 6)]
>>> sum(min([ x for x in st if sum(x)%5 ], key=sum))
6



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Март 27, 2018 14:18:35)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version