Форум » Обработка целых чисел » Задание 17 №4300 (автор Кабанов) » Ответить

Задание 17 №4300 (автор Кабанов)

Родион: Добрый день! Не сходится ответ с решением автора, первое число получается не 140, а 150. Максимальная сумма сходится Мое решение (здесь f - файловая переменная) k = 0 maxSum = -1000000000 nums = [] for i in f: nums += [int(i)] prev = nums[0] for i in range(1, len(nums)): cur = nums[i] s = prev + cur if s % 3 == 0 and s % 6 != 0 and (prev * cur) % 10 == 8: k += 1 if s > maxSum: maxSum = s prev = cur print(k,maxSum) Подскажите, пожалуйста, что я делаю не так?

Ответов - 8

MrAndrewson: Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом. Подозреваю, что работаете с отрицательными числами и не берете модуль при взятии остатка от деления.

cabanov.alexey: abs(prev * cur) % 10 == 8

Родион: Понял, спасибо большое) Неожиданно, что питон так работает с отрицательными числами при подсчете остатка от деления


MrAndrewson: В разных языках программирования остаток по-разному считается. Подробнее на википедии https://ru.wikipedia.org/wiki/Деление_с_остатком В с++, с#, Pascal знак остатка определяет Делимое, в Python - Делитель.

PeerGynt: (№ 4300) (А. Кабанов) В файле 17-3.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, сумма которых кратна 3 и не кратна 6, а произведение оканчивается на 8, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности. теперь собственно существо вопроса: файл содержит 5001 строку, при этом в первой строке записано значение 5000. Это как то связано? или действительно задумывалось 5001 значение и первое значение по "счастливому" совпадению оказалось равным 5000? Если же данная связь не случайна, то условие требует уточнения. Хотя сразу оговорюсь - на ответ это не влияет (но при других значениях и количествах строк в файле могло бы повлиять). это скорее вопрос касающийся того, что везде должен быть порядок.

cabanov.alexey: теперь собственно существо вопроса: файл содержит 5001 строку, при этом в первой строке записано значение 5000. Это как то связано? или действительно задумывалось 5001 значение и первое значение по "счастливому" совпадению оказалось равным 5000? 5000 - это просто число.

Чаговец: А у меня вот такое решение этой задачи: [pre2] ### uses school; var a:=ReadLines('17-3.txt') .Sel(x->x.ToInteger) .pairwise.wh(\(a,b)->(a+b).D(3) and (a+b).ND(6) and (abs(a*b) mod 10 =8)); println(a.Count,a.Sel(\(a,b)->a+b).Max); [/pre2]

PeerGynt: отличная идея сформировать набор пар с помощью pairwise!!! единственное чего я избегал бы - это использования распаковки кортежа. эта возможность появилась в версии 3.8, а недавно ученик показал перечень программ в котором он ставил подпись "ознакомлен". там указаны версии "3.7.1 или 3.8.1" - то есть может оказаться что данный прием не будет работать. конструкция "wh(x->(x[0]+x[1])..." будет гарантировано работать и на старых версиях. и возможно я бы допилил код таким образом [pre2] .. .pairwise.wh(\(a,b)->(a+b).D(3) and (a+b).ND(6) and (abs(a*b) mod 10 =8)) .Sel(\(a,b)->a+b); println(a.Count,a.Max); [/pre2] или [pre2] .. .pairwise((x,y)->(x+y , x*y)) .wh(x->x[0].isodd and x[0].D(3) and (x[1].digits.last=8)) .sel(x->x[0]); println(a.Count,a.Max); [/pre2]



полная версия страницы