Пример выходных данных для приведенного примера

advertisement
Задание ЕГЭ, часть С4 (декабрь 2011)
По каналу связи передается последовательность положительных целых чисел, все
числа не превышают 1000, их количество заранее неизвестно. Каждое число
передается отдельно. Признаком конца передаваемой последовательности является
число 0. После числа
0 передается контрольное значение – наибольшее число R,
удовлетворяющее следующим условиям:
1) R – произведение двух различных переданных элементов последовательности
(«различные» означает, что не рассматриваются квадраты переданных чисел,
произведения различных, но равных по величине элементов допускаются);
2) R делится на 6.
Напишите эффективную программу, которая получает последовательность чисел и
следующие за ней признак конца и контрольное значение, а также проверяет
правильность контрольного значения. Программа должна напечатать отчет по
следующей форме:
Получено .. чисел
Полученное контрольное значение: ….
Вычисленное контрольное значение:…
Контроль не пройден (или – контроль не пройден).
Пример входных данных:
60
17
3
7
9
60
0
3600
Пример выходных данных для приведенного выше примера входных
данных:
Получено 6 чисел
Полученное контрольное значение: 3600
Вычисленное контрольное значение: 3600
Контроль пройден.
Содержание верного ответа
(допускаются иные формулировки ответа, не искажающие его смысла)
Произведение двух чисел делится на 6, если:
• один из сомножителей делится на 6 (второй может быть любым) либо
• ни один из сомножителей не делится на 6, причем один из сомножителей
делится на 2, а другой – на 3..
Поэтому программа, вычисляющая кодовое число может работать так.
Программа читает все входные данные один раз, не запоминая все данные в
массиве. Программа для прочитанного фрагмента входной последовательности хранит значения четырех величин:
•
•
•
•
М2 – самое большое четное число;
М3 – самое большое число кратное трем;
М6 – самое большое число кратное шести;
МAX – самое большое число, среди всех элементов последовательности
(если число М6 встретилось более одного раза или оно не является
максимальным среди всех прочитанных чисел) или самое большое число,
отличное от М6 (в противном случае).
После того, как все данные прочитаны, искомое кодовое слово вычисляется,
как максимум из произведений М6*MAX и М2*М3.
.
Блок-схема алгоритма
Текст программы
Задание ЕГЭ, часть С4 (март 2012)
На вход программе сначала подается значение N – количество учеников
школы, следующие N строк содержат список дней рождения учеников этой
школы. Каждый день рождения занимает отдельную строку, содержащую
дату, записанную по правилам русского языка строчными буквами, например,
«двадцать третье февраля». Год не указывается, слова отделяются друг от
друга одним пробелом, в начале и конце строки дополнительных пробелов
нет.
Напишите эффективную программу, которая определяет количество дней
рождения в каждом календарном месяце и выводит название месяцев и
соответствующие количества в порядке убывания количества дней рождения
в месяце. Если у двух и более месяцев количество дней рождения совпадает,
эти месяцы следует выводит в том порядке, в каком они следуют в календаре.
Если в каком-то месяце дней рождения нет, данные об этом месяце выводить
не надо.
Перед текстом программы кратко опишите используемый вами алгоритм
решения задачи.
Например, выходные данные:
5
первое мая
восьмое марта
десятое мая
двадцать третье февраля
девятое мая
Пример выходных данных для приведенного выше примера:
май 3
февраль 1
март 1
Содержание верного ответа
Программа создает массив из 12 счетчиков для подсчета количества дней
рождения в каждом месяце.
Входные данные читаются один раз, без запоминания в массив. Для каждой
прочитанной строки определяется месяц (это всегда последнее слово в
строке) и увеличивается соответствующей счетчик.
После завершения ввода массив счетчиков сортируется.
При сортировке необходимо сохранить соответствие счетчиков и названия
месяцев и правильно (в календарном порядке) расположить месяцы с
равным количеством дней рождения.
Поскольку массива счетчиков невелик, допускается вместо сортировки
использовать многократный выбор максимального элемента и его
удаление. Разрешается вместо программирования сортировки обращаться
к стандартным средствам языка (для языков в которых есть такие средства).
Задание ЕГЭ, часть С4 (февраль 2012)
По каналу связи передается последовательность положительных целых
чисел X1, X2,… все числа не превышают 1000, их количество заранее
неизвестно. Каждое число передается в виде отдельной текстовой строки,
содержащей десятичную запись числа.
Признаком конца передаваемой последовательности является число 0.
Участок последовательности от элемента XT , до элемента XT+N
называется подъемом, если на этом участке каждое следующее число
больше предыдущего. Высотой подъема называется разность XT+N - XT .
Напишите эффективную программу, которая вычисляет наибольшую
высоту
среди
всех
подъемов
последовательности.
последовательности нет ни одного подъема, программа выдает
Программа должна напечатать отчет по следующей форме:
Получено ... чисел
Наибольшая высота подъема: …
Если
0.
в
Перед текстом программы кратко опишите используемый вами
алгоритм решения задачи.
Пример входных данных:
144
17
27
3
7
9
11
10
0
Пример выходных данных для приведенного выше примера входных
данных:
Получено 8 чисел
Наибольшая высота подъема: 10
Содержание верного ответа
Программа читает все входные данные один раз, не запоминая все
входные данные в массиве.
Во время чтения программа помнит число LMax – высоту самого
высокого из уже закончившихся подъемов, а также необходимые сведения
о текущем подъеме, например, число L – высоту текущего подъема (то есть
разность между последним и первым числом участка) и последнее
прочитанное число T (это число – наибольшее из чисел текущего подъема).
Прочитав очередное число R, программа сравнивает его с числом T.
Если R > T, то значение L увеличивается на R-T.
В противном случае фиксируется конец подъема и начало нового
участка. То есть:
• во-первых, значение L сравнивается с LMax и, при необходимости,
LMax полагается равным L.
• во-вторых, полагаем L = 0
Задание ЕГЭ, часть С4 (апрель 2012)
Необходимо написать программу распознания чисел, записанных
прописью. Сначала на вход программе подается обучающий блок,
состоящий из 27 строк:
•
первые 9 строк содержат слова «один», «два», …., «девять»;
•
Следующие 9 строк – «десять», «одиннадцать», …, «девятнадцать»;
•
Следующие 9 строк – «десять», «двадцать», …, «девяносто».
Все слова записаны маленькими русскими буквами без лишних
пробелов в начале и в конце строки.
Затем на вход подается значение N – количество записей, которое
необходимо обработать. Следующие N строк содержать записанные
словами числа. Каждое число записано по-русски, маленькими буквами,
без ошибок. Если число состоит из нескольких слов, между словами
находится ровно один пробел, лишних пробелов в начале и в конце строк
нет.
Напишите эффективную программу, которая определяет сумму тех
входных чисел, которые находятся в интервале от 1 до 99.
Перед текстом программы коротко опишите используемый вами
алгоритм решения задачи.
Пример выходных данных (обучающий блок в примере показан в
сокращении):
один
два
…..
Девяносто
5
двадцать восемь
два миллиона
четырнадцать
сто двадцать три
Тысяча девятьсот восемьдесят четыре
Пример выходных данных для приведенного примера:
42
•Программа читает обучающий блок и запоминает написание чисел и их
значения.
• Допускается построение полного «словаря» всех чисел от 1 до 99 или
хранение только исходного обучающего блока.
•Программа читает входные строки, не запоминая их в массиве. Если
построен полный «слова» , прочитанная строка ищется в этом словаре как
единое число, если «словаря» нет, строка разбивается на слова (в
подходящей строке их может быть не более двух), каждое слово ищется в
данных обучающего блока.
•Числовое значение введенной строки равно сумме значений составляющих
слов.
•Если какое-то слов (или вся строка при поиске в полном «словаре»)
отсутствует в обучающих данных, введенное число не попадает в интервал
от 1 до 99 и не должно учитываться.
•Дополнительная проверка вхождения числа в заданный интервал не нужна.
Задание ЕГЭ, часть С4 (май 2012)
Написать программу анализа текста.
•На вход программе подаются строки, содержащие английские слова.
•В одной строке может быть произвольное количество слов.
•Все слова записываются строчными (маленькими) буквами латинского
алфавита.
•Между словами в строе может быть один или более пробелов, возможны
пробелы в начале и в конце строки.
• Других символов, кроме строчных латинских букв и пробелов, в строках
нет.
•Длина каждой строки не превышает 200 символов.
•Количество строк неизвестно, общее число слов не более одного
миллиона.
•Конец ввода обозначается строкой, содержащей единственный символ
«*».
Написать программу, которая будет определять количество слов,
начинающихся на каждую букву алфавита, и выводить эти количества и
соответствующие им буквы в порядке убывания.
Если количество слов, начинающихся на какие-то буквы совпадает, эти
буквы следует выводить в алфавитном порядке.
Если не какую-то букву слов нет, выводить эту букву не надо.
Пример входных данных:
one two three four five
a quick brown fox
*
Пример выходных данных для приведенного примера:
f3
t2
a1
b1
o1
q1
В английском алфавите 26 букв:
abcdefghijklmnopqrstuvwxyz
1). Программа создает массив из 26 счетчиков для подсчета количества слов
на каждую букву.
Допускается использование символов как индексов, но в этом случае
вместо обычной сортировки должен использоваться последовательный
выбор, иначе есть риск потерять информацию о том, какой букве
соответствует каждое количество.
2) Программа читает входные строки, не запоминая их в массиве.
В каждой строке определяются первые буквы слов, соответствующие
счетчики увеличиваются. Искомые буквы можно определить по признаку
«буква в первой позиции или сразу после пробела». Не является ошибкой,
если программа выделяет полные слова.
3) После заполнения массив счетчиков сортируется. При сортировке
необходимо сохранить информацию о соответствии букв и чисел, а так же
учесть, что при равных количествах раньше должна оказаться та буква,
которая раньше идет в алфавите.
4) Отсортированный массив должен быть выведен. Буквы, которым
соответствует нулевое значение счетчика, выводить не нужно.
Допускается вместо сортировки использовать многократный выбор и вывод
наибольшего элемента с его последующим удалением (обнулением).
С
Е
Н
Т
Я
Б
Р
Ь
На плоскости дан набор точек с целочисленными координатами.
Необходимо найти треугольник наибольшей площади с вершинами в этих
точках, одна из сторон которого лежит на оси Ox.
2
0
1
2
Программа должна вывести одно число – максимальную площадь
треугольника, удовлетворяющего условию задачи. Если такого треугольника
не существует, программа выводит ноль.
Описание входных данных:
В первой строке вводится одно целое число – количество точек N.
Каждая из следующих N строк содержит 2 целых числа – сначала координату
x, затем координата y очередной точки.
Описание выходных данных:
Пример выходных данных:
6
00
20
04
33
55
-6 -6
При мер выходных данных:
6
Содержание верного ответа
(допускаются другие формулировки, не искажающие его смысла)
Программа читает входные данные, не запоминая все точки в
массиве.
Для каждой точки проверяется ее принадлежность оси Ox (условие
y=0).
Среди точек, лежащих на оси, необходимо найти наиболее далеко
отстающие друг от друга – они дадут наибольшее возможное основание
треугольника. Это будут точки с наибольшими и наименьшими
значениями координат x.
Среди точек, не лежащих на оси x, надо найти точку, дальше всех
отстающую от этой оси – она даст наибольшее возможное значение
высоты. Это будет точка с наибольшим по модулю значением координаты
y.
Таким образом, задача сводится к нахождению максимального и
минимального x среди точек, у которых y=0, максимального по модулю y
среди остальных точек и нахождении площади треугольника на основе
этих данных.
program c4;
var
n: integer;
x, y: integer;
xmin, xmax: integer;
xsearch: boolean;
ymax: integer;
i: integer;
s: real;
begin
xsearch := true;
xmin := 0; xmax := 0;
ymax := 0;
readln(n);
for i:=1 to n do
begin
readln(x,y);
if y=0 then begin
if xsearch or (x<xmin) then xmin:=x;
if xsearch or (x>xmax) then xmax:=x;
xsearch:=false;
end
else if abs(y)>ymax then ymax:=abs(y);
end;
s := (xmax-xmin)*ymax/2;
writeln(s);
end.
Download