На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 5 (разница в индексах элементов пары должна быть 5 или более, порядок элементов в паре неважен).
Необходимо определить количество таких пар, для которых произведение элементов делится на 11.
Описание входных и выходных данных
Даны два входных файла (файл A и файл B). В первой строке входных данных задаётся количество чисел N(5≤N≤1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10000.
В качестве результата программа должна вывести одно число: количество пар элементов, находящихся в последовательности на расстоянии не меньше чем 5, в которых произведение элементов кратно 11.
Пояснение:
Из 7 заданных элементов с учётом допустимых расстояний между ними можно составить 3 произведения: 22 ⋅ 1, 22 ⋅ 11, 2 ⋅ 11. Из них на 11 делятся все 3 произведения.
№27 КЕГЭ. Поиск макс пары, сумма которых кратна 120
Пример организации исходных данных во входном файле:
7
22
2
3
5
4
1
11
Пример выходных данных для приведённого выше примера входных данных:
3
В ответе запишите два числа: ПЕРВОЕ – число, полученное из первого файла; ВТОРОЕ – число, полученное из второго файла.
Источник: «19.04.2021 ЕГЭ 100БАЛЛОВ, Иосиф Дзеранов»
Источник: informatikaexpert.ru
Задание 27 из реального ЕГЭ по информатике 2021
Привет! Сегодня рассмотрим 27 задание из реального экзамена ЕГЭ по информатике 2021 (вариант Евгения Джобса).
Приведу собственное решение данной задачи.
Именно эта задача вызвала немало трудностей у выпускников и даже преподавателей.
Более эффективное решение данной задачи смотрите в ЕГЭ по информатике — Задание 27 (Цепочки чисел)
Задание 27 (ЕГЭ по информатике 2021)
На вход программы поступает последовательность из целых положительных чисел. Необходимо выбрать такую подпоследовательность подряд идущих чисел, чтобы их сумма была максимальной и делилась на 89, а также её длину. Если таких подпоследовательностей несколько, выбрать такую, у которой длина меньше.
Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (2 ≤ N ≤ 68000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10000. Программа должна вывести длину найденной последовательности.
Для делителя 50 при указанных входных данных значением искомой суммы должно быть число 100 (3 + 4 + 93 или 5 + 95). Следовательно, ответ на задачу — 2. В ответе укажите два числа: сначала значение искомой суммы для файла A, затем для файла B.
27 задание ЕГЭ Информатика Определение количества троек
Т.е. мы должны найти длину цепочки элементов, чтобы их сумма была самая большая из всех возможных, и при этом делилась на 89.
Напишем код на Python.
f=open(’27_B.txt’) #Считываем количество чисел n=int(f.readline()) sm=0 a=[] #Записываем все числа в массив #Cуммируем все элементы в sm for i in range(1, n+1): x=int(f.readline()) a.append(x) sm=sm+x #Найдём количество «лишних» единиц. lishnie_edinici = sm % 89 #Количество элементов, которые нужно отнять от всей суммы count=0 ################# 1 Эпизод ################# sm1 = 0 k1=0 for i in range(0, n): sm1=sm1+a[i] k1=k1+1 if sm1%89==lishnie_edinici: break ################# 2 Эпизод ################# sm2=0 k2=0 for i in range(n-1, -1, -1): sm2=sm2+a[i] k2=k2+1 if sm2%89==lishnie_edinici: break ################# 3 Эпизод ################# if sm1 sm2: mn=sm1 count=k1 else: mn=sm2 count=k2 if sm1==sm2: count=max(k1, k2) sm3_1=0 k3_1=0 k3_2=0 for i in range(0, n): if sm3_1 > mn: break sm3_1=sm3_1+a[i] k3_1=k3_1+1 k3_2=0 sm3_2=0 for j in range(n-1, -1, -1): sm3_2=sm3_2+a[j] k3_2=k3_2+1 if (sm3_1+sm3_2)%89==lishnie_edinici: if (sm3_1+sm3_2) mn: mn=sm3_1+sm3_2 count=k3_1+k3_2 if sm3_1+sm3_2==mn: count=max(count, k3_1+k3_2) break ################# 4 Эпизод ################# sm4_1=0 k4_1=0 k4_2=0 for i in range(n-1, -1, -1): if sm4_1 > mn: break sm4_1=sm4_1+a[i] k4_1=k4_1+1 k4_2=0 sm4_2=0 for j in range(0, n): sm4_2=sm4_2+a[j] k4_2=k4_2+1 if (sm4_1+sm4_2)%89==lishnie_edinici: if (sm4_1+sm4_2) mn: mn=sm4_1+sm4_2 count=k4_1+k4_2 if sm4_1+sm4_2==mn: count=max(count, k4_1+k4_2) break #Распечатываем ответ if lishnie_edinici==0: print(n) else: print(n-count)
В начале мы суммируем все числа в переменную sm. Это и есть самая большая сумма, которую мы можем получить. Но наша сумма так же должна делится на число 89.
Узнаем, а что мешает нашей сумме делиться на 89. Т.е. узнаем, сколько «лишних» единиц в этой сумме. Для этого найдём остаток от деления суммы на 89 и занесём результат в переменную lishnie_edinici.
Теперь наша задача сводится к тому, чтобы убрать эти «лишние» единицы, и как можно меньше «навредить» уже найденной сумме (Т.е. чтобы сумма осталось максимальной).
1 Эпизод. Смотрим, сколько нужно «снять» элементов сверху из нашей цепочки, чтобы сумма снятых элементов содержала в себе нужно количество «лишних» единиц.
Как только мы это найдём, в переменной sm1 будет сумма элементов, которые можно снять сверху, чтобы сумма основной цепочки делилась на 89. В переменной k1 будет количество этих элементов.
2 Эпизод. Всё аналогично первому эпизоду, только пробуем снять элементы снизу основной цепочки.
3 Эпизод. Нам нужно убрать элементы, у которых сумма будет как можно меньше, ведь в основной цепочке сумма должна быть, как можно больше! После двух эпизодов мы кладём наименьшую сумму убранных элементов в переменную mn.
Задания 27. Программирование . Универсальный код
Есть такое задание: На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре неважен).
Необходимо определить количество пар, для которых произведение элементов кратно 26. В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 60 000). В каждой из последующих N строк записано одно натуральное число, не превышающее 10 000. В качестве результата программа должна вывести одно число: количество пар, в которых произведение элементов кратно 26. Пример организации исходных данных во входном файле: 5 2 6 13 31 93 Пример выходных данных для приведённого выше примера входных данных: 4 В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B. Можно ли написать код, и решить данное задание без составления пар для числа 26 ? Составить универсальный код , который сможет обрабатывать все подобные числа, не тратя большое количество ресурсов по памяти ? Прошу помочь мне с этим заданием ) Как выглядит мой код с составлением пар:
f = open(«pairs.txt» , ‘r’) a = f.readlines() k = [] for i in range(1, len(a)): q1 = int(a[i]) k.append(q1) k13 = 0 k0 = 0 k1 = 0 k26 = 0 count = 0 if k[0] % 13 == 0 and k[0] % 2 == 1: k13 += 1 elif k[0] % 26 == 0: k26 += 1 elif k[0] % 2 == 1: k1 += 1 elif k[0] % 2 == 0: k0 += 1 for j in range(1, len(k)): if k[j] % 13 == 0 and k[j] % 2 == 1: count += k0 + k26 k13 += 1 elif k[j] % 26 ==0: count += j k26 += 1 elif k[j] % 2 ==1: count += k26 k1 + =1 elif k[j] % 2 == 0: count += k13 k0 += 1 print(count)
Ваш код: ? ? ? ? ? введите сюда код Универсальный код в моем понимании:
f = open(«Файл») def get(): return list(map(int, f.readline().split())) n = int(f.readline()) s = get() m = float(‘-inf’) div = 3 for _ in range(n — 1): pair = get() temp = [i + j for i in s for j in pair] fake_s = [m] * div for x in temp: fake_s[x % div] = max(fake_s[x % div], x) s = [x for x in fake_s if x != m] print(s)
Источник: ru.stackoverflow.com