Форум » Обработка числовых последовательностей » Задание 27. Досрочный период (2020 г. - вариант 1.) » Ответить

Задание 27. Досрочный период (2020 г. - вариант 1.)

daimon2006: Обзоры в интернете вдохновили меня на написание данного решения. Само условие: Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности, разность которых чётна, и в этих парах, по крайней мере, одно из чисел пары делится на 17. Порядок элементов в паре неважен. Среди всех таких пар нужно найти и вывести пару с максимальной суммой элементов. Если одинаковую максимальную сумму имеет несколько пар, можно вывести любую из них. Если подходящих пар в последовательности нет, нужно вывести два нуля. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (2 ≤ N ≤ 10 000). В каждой из последующих N строк записано одно натуральное число, не превышающее 10 000. Пример входных данных: 5 34 12 51 52 51 Пример выходных данных для приведённого выше примера входных данных: 51 51 Пояснение. Из данных пяти чисел можно составить три различные пары, удовлетворяющие условию: (34, 12), (34, 52), (51, 51). Наибольшая сумма получается в паре (51, 51). Эта пара допустима, так как число 51 встречается в исходной последовательности дважды. Решение: n=int(input()) b=[0]*6 #b[0]-максимальное нечетное число не кратное 17 #b[1]-максимальное нечетное число кратное 17 #b[2]-если два максимальных нечетных числа краных 17 #b[3]-максимальное четное число не кратное 17 #b[4]-максимальное четное число кратное 17 #b[5]-если два максимальных четных числа краных 17 max_n=0 x1=x2=0 for i in range(n): x=int(input()) if x>b[0] and x%2!=0 and x%17!=0: b[0]=x if x%17==0 and x%2!=0 and x>=b[1]: b[2]=b[1] b[1]=x if x>b[3] and x%2==0 and x%17!=0: b[3]=x if x%17==0 and x%2==0 and x>=b[4]: b[5]=b[4] b[4]=x #Почему цикл? Или надо прописывать все условия и выбирать два элемента или сделать все в цикле (мне так удобнее) #К тому же в цикле всего 6 элеметнов for i in range(len(b)-1): for j in range(i+1,len(b)): if (b[ i]+b[j])>max_n and (b[1]!=0 or b[4]!=0) and (b[ i]-b[j])%2==0: max_n=(b[ i]+b[j]) x1=b[ i] x2=b[j] print(x1,x2) Просьба оценить решение и высказать свои пожелания по оптимизации кода.

Ответов - 7

cabanov.alexey: Оборачивайте код в [ pre2][ /pre2], отступы пропадают. Не вижу условия, что x%17==0 and x%2!=0 and x<b[1] and x>b[2], а также условия что x%17==0 and x%2==0 and x<b[4] and x>b[5] Цикл можно, но не всегда.

daimon2006: Исправляю... Исправил. Просьба указать на ошибки и привести примеры чисел, при которых программа работает не правильно. [pre2] n=int(input()) b=[0]*6 #b[0]-максимальное нечетное число не кратное 17 #b[1]-максимальное нечетное число кратное 17 #b[2]-если два максимальных нечетных числа кратных 17 #b[3]-максимальное четное число не кратное 17 #b[4]-максимальное четное число кратное 17 #b[5]-если два максимальных четных числа краных 17 max_n=0 x1=x2=0 for i in range(n): x=int(input()) if x>b[0] and x%2!=0 and x%17!=0: b[0]=x if x%17==0 and x%2!=0 and x>=b[1]: b[2]=b[1] b[1]=x if x%17==0 and x%2!=0 and b[2]==0 and x!=b[1]: ####### дописал b[2]=x if x>b[3] and x%2==0 and x%17!=0: b[3]=x if x%17==0 and x%2==0 and x>=b[4]: b[5]=b[4] b[4]=x if x%17==0 and x%2==0 and b[5]==0 and x!=b[4]: ####### дописал b[5]=x #Почему цикл? Или надо прописывать все условия и выбирать два элемента или сделать все в цикле (мне так удобнее) #К тому же в цикле всего 6 элеметнов for i in range(len(b)-1): for j in range(i+1,len(b)): if (b[ i]+b[j])>max_n and (b[1]!=0 or b[4]!=0) and (b[ i]-b[j])%2==0: max_n=(b[ i]+b[j]) x1=b[ i] x2=b[j] print(x1,x2) [/pre2]

cabanov.alexey: 153 23 19 51 Программа вообще не найдёт подходящую сумму (153 и 51)


daimon2006:

cabanov.alexey: Теперь всё верно. Программа на 4 балла. Если интересно, то вот решение с использованием динамического программирования

daimon2006: Насколько вероятно задание такого, примерно, типа на основном этапе экзамена?

cabanov.alexey: Ну, скорее всего, задание будет на работу с числовой последовательностью, аналогичное прошлым годам. Конкретики мы не знаем пока. ¯\_(ツ)_/¯



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