В качестве ответа введите все строки наибольшей длины из входного файла не меняя их порядок

Обновлено: 03.07.2024

Рассмотрим решение некоторых задач из варианта ИН2010401 (Статград 2021 № 4).

Задача 2

Логическая функция F задаётся выражением ¬((𝑥∨𝑦)→(𝑧∧𝑤))∧(𝑥→𝑤) . Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F . Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w .

Переменная 1Переменная 2Переменная 3Переменная 4Функция
. . . . F
1111
1 1 1
111

В ответе напишите буквы x, y, z, w ; в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.

Пример. Пусть задано выражение x → y , зависящее от двух переменных x и y , и фрагмент таблицы истинности:

Переменная 1Переменная 1Функция
. . F
010

Тогда первому столбцу соответствует переменная y , а второму столбцу соответствует переменная x . В ответе нужно написать: yx .

Решение. Поскольку пока не известно, в каком столбце заголовка стоит какая переменная, дадим им произвольные имена по порядку, например a, b, c, d . После чего подставим их в функцию F и отобразим только строки, соответствующие значению F=1 . Рассмотрим два варианта решения:

Результат работы программы:

Ответ: zxy

Задача 5

Алгоритм получает на вход натуральное число 𝑁>1 и строит по нему новое число 𝑅 следующим образом:

  1. Строится двоичная запись числа 𝑁.
  2. Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется та цифра, которая встречается реже.
  3. Шаг 2 повторяется ещё два раза.
  4. Результат переводится в десятичную систему счисления.

Пример. Дано число 𝑁=19. Алгоритм работает следующим образом:

  1. Двоичная запись числа N: 10011.
  2. В полученной записи нулей меньше, чем единиц, в конец записи добавляется 0. Новая запись: 100110.
  3. В текущей записи нулей и единиц поровну, в конец записывается последняя цифра, это 0. Получается 1001100. В этой записи единиц меньше, в конец добавляется 1: 10011001.
  4. Результат работы алгоритма 𝑅=153.

При каком наименьшем исходном числе 𝑁>99 в результате работы алгоритма получится число, кратное 4?

Ответ: 103

Задание 6

Определите, при каком наименьшем введённом значении переменной 𝑠 программа выведет число 11. Для Вашего удобства программа представлена на двух языках программирования.


Ответ: 191

Задание 7

В информационной системе хранятся изображения размером 1024×768 пикселей. Методы сжатия изображений не используются. Каждое изображение дополняется служебной информацией, которая занимает 1280 Кбайт. Для хранения 2048 изображений потребовалось 4 Гбайт. Сколько цветов использовано в палитре каждого изображения?

Ответ: 256

Задача 8

Вероника составляет 3-буквенные коды из букв В,Е,Р,О,Н,И,К,А, причём буква В должна входить в код ровно один раз. Все полученные коды Вероника записала в алфавитном порядке и пронумеровала. Начало списка выглядит так:

На каком месте будет записан первый код, не содержащий ни одной буквы А?

Ответ: 23

Задание 11

Ответ: 2700

Задание 14

Значение выражения 729 7 +3 16 –18 записали в системе счисления с основанием 9. Сколько раз в этой записи встречается цифра 0?

Ответ: 14

Задание 15

Для какого наименьшего натурального числа 𝐴 формула ДЕЛ(𝐴,45)∧(ДЕЛ(750,𝑥)→(¬ДЕЛ(𝐴,𝑥)→¬ДЕЛ(120,𝑥))) тождественно истинна, то есть принимает значение 1 при любом натуральном 𝑥?

Ответ: 90

Задача 16

Обозначим через 𝑚𝑜𝑑(𝑎,𝑏) остаток от деления натурального числа 𝑎 на натуральное число 𝑏. Алгоритм вычисления значения функции 𝐹(𝑛), где 𝑛 – целое неотрицательное число, задан следующими соотношениями:

  • 𝐹(0)=0;
  • 𝐹(𝑛)=𝐹(𝑛/3), если 𝑛>0 и при этом 𝑚𝑜𝑑(𝑛,3)=0;
  • 𝐹(𝑛)=𝑚𝑜𝑑(𝑛,3)+𝐹(𝑛–𝑚𝑜𝑑(𝑛,3)), если 𝑚𝑜𝑑(𝑛,3)>0.

Назовите минимальное значение 𝑛, для которого 𝐹(𝑛)=11.

Ответ: 485

Задача 17

Назовём натуральное число подходящим, если у него ровно 3 различных простых делителя. Например, число 180 подходящее (его простые делители – 2, 3 и 5), а число 12 – нет (у него только два различных простых делителя). Определите количество подходящих чисел, принадлежащих отрезку [10001;50000], а также наименьшее из таких чисел. В ответе запишите два целых числа: сначала количество, затем наименьшее число.

Ответ: 15652 10002

Задача 22

Ниже записана программа, которая вводит натуральное число 𝑥, выполняет преобразования, а затем выводит два числа. Укажите наименьшее возможное значение 𝑥, при вводе которого программа выведет числа 3 и 10.


Ответ: 874

Задача 23

Исполнитель преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:

Первая команда увеличивает число на экране на 1, вторая умножает его на 2, третья – умножает на 3. Программа для исполнителя – это последовательность команд.

Сколько существует программ, которые преобразуют исходное число 2 в число 36, и при этом траектория вычислений содержит число 12 и не содержит числа 30?

Ответ: 60

Задача 24

Текстовый файл содержит строки различной длины. Общий объём файла не превышает 1 Мбайт. Строки содержат только заглавные буквы латинского алфавита (𝐴𝐵𝐶…𝑍).

Необходимо найти строку, содержащую наименьшее количество букв 𝐺 (если таких строк несколько, надо взять ту, которая находится в файле раньше), и определить, какая буква встречается в этой строке чаще всего. Если таких букв несколько, надо взять ту, которая позже стоит в алфавите.

Пример. Исходный файл:

В этом примере в первой строке две буквы G, во второй и третьей – по одной. Берём вторую строку, т. к. она находится в файле раньше. В этой строке чаще других встречаются буквы A и B (по два раза), выбираем букву B, т. к. она позже стоит в алфавите. В ответе для этого примера надо записать B.

Ответ: T

Задача 25

Найдите все натуральные числа, принадлежащие отрезку [35000000;40000000], у которых ровно пять различных нечётных делителей (количество чётных делителей может быть любым). В ответе перечислите найденные числа в порядке возрастания.

Идея. Нас интересуют числа, являющиеся четвертой степенью простого числа, возможно умноженные на некоторую степень двойки.

Ответ: 35819648; 38950081; 39037448; 39337984

Задача 26

В текстовом файле записан набор натуральных чисел, не превышающих 10 9 . Гарантируется, что все числа различны. Необходимо определить, сколько в наборе таких пар чётных чисел, что их среднее арифметическое тоже присутствует в файле, и чему равно наибольшее из средних арифметических таких пар.

Пример входного файла

В данном случае есть две подходящие пары: 8 и 14 (среднее арифметическое 11), 14 и 2 (среднее арифметическое 8). В ответе надо записать числа 2 и 11. В ответе запишите два целых числа: сначала количество пар, затем наибольшее среднее арифметическое.

Ответ: 15; 976339247

Задача 27

В текстовом файле записан набор натуральных чисел, не превышающих 10 8 . Гарантируется, что все числа различны. Из набора нужно выбрать три числа, сумма которых делится на 3. Какую наибольшую сумму можно при этом получить?

В данном случае есть две подходящие тройки: 5,14,11 (сумма 30) и 8,14,11 (сумма 33). В ответе надо записать число 33.

Вам даны два входных файла (𝐴 и 𝐵), каждый из которых имеет описанную выше структуру. В ответе укажите два числа: сначала значение искомой суммы для файла 𝐴, затем для файла 𝐵.

Программы могут взаимодействовать с файлами, например, читать данные из файлов и выводить результат в текстовый файл.

Открытие файла

Для каждого файла, с которым необходимо производить операции ввода-вывода, нужно связать специальный объект — поток. Открытие файла осуществляется функцией open , которой нужно передать минимум два параметра. Параметр file имеет значение типа str , в котором записано имя открываемого файла. Параметр mode это значение типа str , которое равно "r" , если файл открывается для чтения данных (read), "w" , если на запись (write), при этом содержимое файла очищается, и "a" — для добавления данных в конец файла (append).

Функция open возвращает ссылку на файловый объект, которую нужно записать в переменную, чтобы потом через данный объект использовать методы ввода-вывода. Например: То же самое можно записать и компактнее:

Чтение данных из файла

Для файла, открытого на чтение данных, можно вызывать следующие методы, позволяющие читать данные из файла.

Метод readline() считывает одну строку из файла (до символа конца строки '\n' , возвращается считанная строка вместе с символом '\n' . Если считывание не было успешно (достигнут конец файла), то возвращается пустая строка. Для удаления символа '\n' из конца файла удобно использовать метод строки rstrip() . Например: s = s.rstrip() .

Метод readlines() считывает все строки из файла и возвращает список из всех считанных строк (одна строка — один элемент списка). При этом символы '\n' остаются в концах строк.

Метод read() считывает все содержимое из файла и возвращает строку, которая может содержать символы '\n' . Если методу read передать целочисленный параметр, то будет считано не более заданного количества символов. Например, считывать файл побайтово можно при помощи метода read(1) .

Вывод данных в файл

Данные выводятся в файл при помощи метода write , которому в качестве параметра передается одна строка. Этот метод не выводит символ конца строки '\n' (как это делает функция print при стандартном выводе), поэтому для перехода на новую строку в файле необходимо явно вывести символ '\n' .

Закрытие файла

После окончания работы с файлом необходимо закрыть его при помощи метода close() .

Пример

Следующая программа считывает все содержимое файла input.txt , записывает его в переменную s , а затем выводит ее в файл output.txt .

А вот аналогичная программа, но читающая данные посимвольно:

Смотрите также:

Упражнения

A: A + B

Во входном файле записано два целых числа, каждое в отдельной строке. Выведите в выходной файл их сумму.

Ввод Вывод

B: Числа могут быть где угодно

Во входном файле записано два целых числа, которые могут быть разделены пробелами и концами строк. Выведите в выходной файл их сумму.

Указание. Считайте весь файл в строковую переменную при помощи метода read() и разбейте ее на части при помощи метода split() .

Ввод Вывод

C: Обращение строки

Во входном файле записана одна текстовая строка, возможно, содержащая пробелы. Выведите эту строку в обратном порядке.

Строка во входном файле заканчивается символом конца строки '\n' .

Ввод Вывод

D: Построчное обращение

Выведите все строки данного файла в обратном порядке. Для этого считайте список всех строк при помощи метода readlines() .

Последняя строка входного файла обязательно заканчивается символом '\n' .

Ввод Вывод
read() .
Ввод Вывод
-->

F: Длинные строки

В выходной файл выведите все строки наибольшей длины из входного файла, не меняя их порядок.

В данной задаче удобно считать список строк входного файла целиком при помощи метода readlines() .

Ввод Вывод

G: Поиск символа

Определите, есть ли во входном файле символ '@' . Выведите слово YES или NO .

H: Сумма чисел в строкaх

Дан файл, каждая строка которого может содержать одно или несколько целых чисел, разделенных одним или несколькими пробелами.

Вычислите сумму чисел в каждой строке и выведите эту сумму (для каждой строки выводится сумма чисел в этой строке).

В данной задаче удобно считывать данные построчно.

Ввод Вывод

I: Сумма чисел в файле

В файле могут быть записаны десятичные цифры и все, что угодно. Числом назовем последовательность цифр, идущих подряд (т.е. число всегда неотрицательно).

Вычислите сумму всех чисел, записанных в файле. В данной задаче удобно считывать данные посимвольно.

Ввод Вывод

K: Шифр Цезаря - 2

Зашифруйте данный текстовый файл шифром Цезаря, при этом символы первой строки файла должны циклически сдвигаться на 1, второй строки — на 2, третьей строки — на три и т.д.

В этой задаче удобно считывать файл построчно, шифруя каждую строку в отдельности.

Примечание : в этой задаче имеются ввиду только символы-буквы. Знаки препинания, цифры, пробелы меняться не должны.

Ввод Вывод
8 .

Программа должна вывести названия всех партий и количество голосов в парламенте, полученных данной партией. Названия необходимо выводить в том же порядке, в котором они шли во входных данных.

Ввод Вывод

Для поступления в вуз абитуриент должен предъявить результаты трех экзаменов в виде ЕГЭ, каждый из них оценивается целым числом от 0 до 100 баллов. При этом абитуриенты, набравшие менее 40 баллов (неудовлетворительную оценку) по любому экзамену из конкурса выбывают. Остальные абитуриенты участвуют в конкурсе по сумме баллов за три экзамена.

В конкурсе участвует N человек, при этом количество мест равно K. Определите проходной балл, то есть такое количество баллов, что количество участников, набравших столько или больше баллов не превосходит K, а при добавлении к ним абитуриентов, набравших наибольшее количество баллов среди непринятых абитуриентов, общее число принятых абитуриентов станет больше K.

Программа получает на вход количество абитуриентов N и количество мест K. Далее идет N строк, каждая из которых состоит из имени (текстовая строка содержащая произвольное число пробелов) и трех чисел от 0 до 100, разделенных пробелами.

Программа должна вывести проходной балл в конкурсе. Выведенное значение должно быть минимальным баллом, который набрал абитуриент, прошедший по конкурсу.

Также возможны две ситуации, когда проходной балл не определен.

Если будут зачислены все абитуриенты, не имеющие неудовлетворительных оценок, программа должна вывести число 0.

Если количество абитуриентов, имеющих равный максимальный балл больше чем K, программа должна вывести число 1.

В условиях предыдущей задачи определите полупроходной балл, то есть такое значение балла, что количество абитуриентов, набравших балл выше полупроходного, меньше K, а количество абитурентов, набравших балл выше или равный полупроходному, больше K.

Программа должна вывести значение полупроходного балла, если полупроходного балла не существует, программа должна вывести одно число 0.

Ввод Вывод

В олимпиаде участвовало N человек, каждый из которых мог набрать от 0 до 100 баллов. По положению об олимпиаде жюри может наградить не более 45% от числа участников, округляя их число до целого при необходимости вниз.

При этом если последний участник, попавший в 45% набирает столько же баллов, сколько первый участник, не попавший в 45%, то решение по этим участникам, и всем участникам, набравшим такой балл принимается следующим образом:

Все данные участники объявляются призерами, если набранный ими балл больше половины от максимально возможного балла.

Все эти участники не объявляются призерами, если набранный ими балл не больше половины от максимально возможного.

Программа получает на вход количество участников олимпиады N, далее идет N строчек, содержащих имя участника (текстовая строка с произвольным числом пробелов) и набранный данным участником балл через пробел.




Для нового участника олимпиады возникает непонимание в работе с «какими-то» входными и выходными данными. Любая олимпиадная задача в формулировке задания обязательным образом описывает формат входных и выходных данных, а составленная программа должна считать данные, обработать и вывести результат. Обычно чтение происходит из файла INPUT.TXT, а вывод в некоторый файл OUTPUT.TXT . Т.е. для решения олимпиадных задач нужно уметь работать с файлами. Помимо условия задачи, правил ввода и вывода информации на каждую задачу накладываются ограничения на время выполнения. Отнеситесь к этому, пока как к условному требованию.

Пример формулировки олимпиадной задачи по программированию

Ограничение времени: 1.0 секунды
Ограничение памяти: 64 МБ

Исходные данные

исходные данные

В единственной строке входного файла INPUT.TXT записано два натуральных числа через пробел, не превышающих 10 9 .

Выходные данные

В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел А и В.

Эта простая задача соответствует всем критериям правильной постановки олимпиадной задачи и позволяет ознакомиться с системой автоматической проверки. При решении необходимо из входного файла input.txt, расположенного в текущей папке (где и Ваша программа) считать 2 целых числа и вывести их сумму в выходной файл output.txt.

Повторюсь, ограничения по памяти в 64Мб и времени 1 сек. весьма условны, так как такая простая задача потребует минимальную память и выполнится за минимальный промежуток времени . Каждая задача имеет пример входных и выходных данных , это необходимо для однозначного понимания содержания задачи. В данном примере в разделе отражен пример входных данных "2 5" и выходных "7", это означает, что 2+5=7.

В мире предпочтение отдается языку С++, но в России по-прежнему классическим языком программирования остается Pascal. В школе программистов при нашем АГУ изучают С++. Поэтому, чтобы получить поддержку при подготовке к олимпиаде на республиканском уровне желательно изучить ещё и С++, ну а я помогу.

Пример решения рассмотренной задачи о сложении двух чисел на языках Pascal и С:

var a,b:real;

var a, b : longint;

Для участника олимпиады, иногда, требуется написать программу, которая считывает некоторые данные из одного файла, производит определенные вычисления, а результат выводит в другой файл.

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

Дополните приведенный код, используя индексатор, так чтобы он вывел символ w .

В столбик 1
На вход программе подается одна строка. Напишите программу, которая выводит элементы строки с индексами 0, 2, 4, . в столбик.
Формат входных данных
На вход программе подается одна строка.
Формат выходных данных
Программа должна вывести элементы строки с индексами 0, 2, 4, . , каждое на отдельной строке.

В столбик 2
На вход программе подается одна строка. Напишите программу, которая выводит в столбик элементы строки в обратном порядке.
Формат входных данных
На вход программе подается одна строка.
Формат выходных данных
Программа должна вывести в столбик элементы строки в обратном порядке.

ФИО
На вход программе подаются три строки: имя, фамилия и отчество. Напишите программу, которая выводит инициалы человека.
Формат входных данных
На вход программе подаются три строки, каждая на отдельной строке.
Формат выходных данных
Программа должна вывести ФИО человека.
Примечание. Гарантируется, что имя, фамилия и отчество начинаются с заглавной буквы.

Цифра 1
На вход программе подается одна строка состоящая из цифр. Напишите программу, которая считает сумму цифр данной строки.
Формат входных данных
На вход программе подается одна строка состоящая из цифр.
Формат выходных данных
Программа должна вывести сумму цифр данной строки.

Сколько раз?
На вход программе подается одна строка. Напишите программу, которая определяет сколько раз в строке встречаются символы + и * .
Формат входных данных
На вход программе подается одна строка.
Формат выходных данных
Программа должна вывести сколько раз встречаются символы + и * в строке.

Одинаковые соседи
На вход программе подается одна строка. Напишите программу, которая определяет сколько в ней одинаковых соседних символов.
Формат входных данных
На вход программе подается одна строка.
Формат выходных данных
Программа должна вывести количество одинаковых соседних символов.

Гласные и согласные
На вход программе подается одна строка с буквами русского языка. Напишите программу, которая определяет количество гласных и согласных букв.
Формат входных данных
На вход программе подается одна строка.
Формат выходных данных
Программа должна вывести количество гласных и согласных букв.
Примечание. В русском языке 10 гласных букв (а, у, о, ы, и, э, я, ю, ё, е) и 21 согласная буква (б, в, г, д, ж, з, й, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ).

Decimal to Binary
На вход программе подается натуральное число, записанное в десятичной системе счисления. Напишите программу, которая переводит данное число в двоичную систему счисления.
Формат входных данных
На вход программе подается одно натуральное число.
Формат выходных данных
Программа должна вывести число записанное в двоичной системе счисления.

Читайте также: