Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 18.07.2019
Сообщений: 47

Найти максимальную сумму с концом которой является цифра 8

18.11.2020, 17:36. Показов 3188. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан список длиной n элементы которого положительные числа. Список типа [12,43,21,1]
Найти минимальную сумму которая оканчивается на 8. Число слагаемых может быть любым, но любой элемент списка можно использовать только один раз.
Прошу составить алгоритм который будет работать с любым списком
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2020, 17:36
Ответы с готовыми решениями:

Дана последовательность символов, концом которой является символ точка. Поменять все цифры на *
Вывести в одну строку: ABBCCC...ZZ...Z Переменные: i - переменная цикла: определяет, какая буква будет выводиться; k - количество...

Дана строка типа char (вводится с клавиатуры), в которой имеются цифры. а) Найти их сумму. б) Найти максимальную цифру
Дана строка типа char (вводится с клавиатуры), в которой имеются цифры. а) Найти их сумму. б) Найти максимальную цифру Где ошибка? Почему...

Найти и вывести сумму всех хороших (цифра десятков больше, чем цифра единиц) элементов массива
Задание 25 № 5289. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Элемент массива...

25
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
18.11.2020, 21:23
Danif, попробуй
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def part(n, k):
    def _part(n, k, pre): 
        if n <= 0:
            return []
        if k == 1:
            if n <= pre:
                return [[n]] 
            return []
        ret = []
        for i in range(min(pre, n), 0, -1):
            ret += [[i] + sub for sub in _part(n-i, k-1, i)]
        return ret
    return _part(n, k, n)
    
mylist = list(map(int,input().split()))
mydict = {i: [j for j in mylist if j%10 == i] for i in range(10)}
sum8 = sum(mylist)
arr = []
for i in range(1,8) :
    arr.extend(part(8,i))
#print(*arr)
for k in arr :
    tmp = []
    k.sort()
    for i in set(k) :
        if len(mydict[i]) >= k.count(i) :
            tmp.extend(mydict[i][:k.count(i)])
        else :
            tmp = []
            break
    if len(tmp) :
        if sum8 > sum(tmp) :
            sum8 = sum(tmp)
            res = tmp.copy()
        #print(tmp,k)
print(*res)
print(sum8)
1
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
18.11.2020, 21:33
Рекурсивный полный перебор
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def foo(arr, cur_sum=0, itog=None):
    if itog is None:
        itog = []
 
    for n, i in enumerate(arr):
        tmp = cur_sum + i
        if str(tmp)[-1] == '8':
            itog.append(tmp)
        foo(arr[n + 1:], tmp, itog)
 
    return itog
 
 
array = [12, 43, 21, 6]
 
print(min(foo(array)))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
18.11.2020, 21:41
unfindable_404,
Для массивов со 100 числами уже долго очень
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
18.11.2020, 21:56
Gdez, это верно?
Code
1
2
[29, 27, 29, 28, 29]
28
Если я правильно понял задачу (но у других слишком сложный код, поэтому я не уверен )
Python
1
2
3
4
import itertools
 
arr = [12, 43, 21, 6]
print(tuple(itertools.accumulate(sorted(arr)))[1])
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
18.11.2020, 22:00
ioprst, по условию 28 тоже решение
Питон же дает сумму списка из одного элемента
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
18.11.2020, 22:01
Я забыл про восьмерку (спасибо Gdez).

Python
1
2
3
import itertools
 
print(min(filter(lambda x: x % 10 == 8, itertools.accumulate(sorted(array)))))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
18.11.2020, 22:05
ioprst, Вроде самое быстрое решение
А впрочем поторопился - нужна минимальная сумма чисел списка оканчивающаяся на 8
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
18.11.2020, 22:11
Я тестирую и ловлю баги. Надо доработать. Но главное принцип, а там ТС сам доделает.

Добавлено через 3 минуты
Нет, мое решение ошибочно. Я ухожу . (я не перебираю все варианты)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
18.11.2020, 22:11
ioprst, у меня не получилось с itertools-ом допилить - при и больших массивах перебор долго решает.
У меня в коде цикл "маленький" - по количеству разложений числа 8 на слагаемые - 22 вроде способа
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
18.11.2020, 22:43
Исправил
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import itertools
 
array = [randint(25, 50) for _ in range(100)]
array.sort()
res_sm = float('inf')
 
flg = False
for i in range(len(array)):
    combs = itertools.combinations(array, i+1)
    for comb in combs:
        sm = sum(comb)
        if sm % 10 == 8:
            if sm < res_sm:
                res_sm = sm
                flg = True
                break
    if flg:
        break
 
print(res_sm if res_sm != float('inf') else 'no')
Добавлено через 4 минуты
Gdez, но у нас с вами ответы различаются.
Вы используете одинаковые элементы списка (один раз конечно же)?
Code
1
2
3
[36, 49, 49, 47, 27]
208
98
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
18.11.2020, 22:47
ioprst, хмммм
Python
1
(lambda lst: print(*max([[sum(y) for y in x if str(sum(y)).endswith('8')] for x in [ list(__import__('itertools').combinations(lst, z)) for z in range(1, len(lst)+1)]])))(list(map(int, input().split())))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
18.11.2020, 22:48
ioprst, чем отличаются?
Вроде тот же принцип...
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
18.11.2020, 22:52
Gdez, нет, accumulate() рассматривает не все суммы

Добавлено через 1 минуту
и у меня мальнкая ошибочка...
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
18.11.2020, 22:55
Miryz, я про combinations - другой его код
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
18.11.2020, 22:57
Gdez, первый ответ ваш, второй мой
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
18.11.2020, 23:03
Python
1
(lambda lst: print(max([sum(j) for j in filter(None, [[sum(y) for y in x if str(sum(y)).endswith('8')] for x in[list(__import__('itertools').combinations(lst, z)) for z in range(1, len(lst)+1)]])])))(list(map(int, input().split())))
Добавлено через 11 секунд
вот без ошибок вроде

Добавлено через 3 минуты
Цитата Сообщение от ioprst Посмотреть сообщение
Вы используете одинаковые элементы списка (один раз конечно же)?
у вас неверный ответ
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
18.11.2020, 23:03
Miryz, что-то очень долго. Очевидно, что минимальная сумма будет состоять из минимальных элементов. Здесь точно нужна сортировка массива. И выход из цикла как только нашли первую сумму, которая оканчивается на 8.
0
 Аватар для Miryz
291 / 131 / 58
Регистрация: 24.11.2019
Сообщений: 532
18.11.2020, 23:04
Цитата Сообщение от Danif Посмотреть сообщение
максимальную сумму с концом которой является цифра 8
не понял
Цитата Сообщение от ioprst Посмотреть сообщение
минимальная сумма
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
18.11.2020, 23:04
Цитата Сообщение от Miryz Посмотреть сообщение
у вас неверный ответ
какой?

Добавлено через 31 секунду
Блин. Я искал минимальную, а нужна максимальная
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2020, 23:04
Помогаю со студенческими работами здесь

Дано число n. Найти максимальную цифру. Сколько раз максимальная цифра повторяется в числе?
Дано число n. Найти масимальную цифру. Сколько раз максимальная цифра повторяется в числе?

Найти максимальную точность, с которой можно измерить положение протона
Добрый вечер, решил для себя решить задачку, но столкнулся с проблемой неизвестности. Суть задачи: дана скорость протона, нужно найти...

Является ли элемент концом списка turbo prolog
Помогите написать программу, которая должна определить: является ли элемент концом списка? Что то вроде: spisok(3, ) - Yes spisok(5,...

Найти максимальную сумму чисел в одной строке и вывести на экран эту сумму и номер строки
2) Если в условиях задачи сказано &quot;Дан двумерный массив&quot;, то программа получает на вход два числа n и m, являющиеся числом строк и...

Найти в строке максимальную по длине подстроку, которая является палиндромом
Найдите в данной вам строке максимальную по длине подстроку, которая является палиндромом (то есть, читается слева направо и справа налево...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru