Решение олимпиадных задач по программированию 2012 г.

advertisement
МБОУ «Джалильская СОШ №1 с углубленным изучением
отдельных предметов»
Базовая площадка технического творчества
Мастер-класс
«Решение олимпиадных задач по
информатике 2012 года»
Провела: учитель информатики высшей квалификационной
категории Давлетова Ильсеяр Марселевна
Джалиль, 2013 год
Введение.
Целью кружка является: изучение методов структурного и объектно-ориентированного
программирования на примере языков Turbo Pascal и Delphi и получение навыков
разработки проектов в среде Delphi.
Задачи:
 Изучить концепцию традиционного и объектно-ориентированного
программирования;
 Познакомить с методами структурного и объектно-ориентированного
программирования как наиболее распространенными и эффективными методами
разработки программных продуктов;
Привить навык работы с интегрированной средой объектно-ориентированного
визуального языка программирования
В первой части кружковых занятий учащиеся получают начальные знания, умения и
навыки необходимые для решения олимпиадных задач. Знакомятся с методами написания
простых программ. Изучаются основные темы, на знании которых базируются решения
большинства олимпиадных задач.
Во второй части кружковых занятий учащиеся знакомятся с методами объектноориентированного программирования. Систему программирования Delphi называют также
средой проектирования или просто средой Delphi. Почему в этом термине слово
«программирование» заменено словом «проектирование»? Учащиеся должны научиться
создавать пусть не очень сложные, но настоящие программные приложения, работающие
в системе Windows.
Цель занятий: помочь ученикам изучить и освоить современные методы решения
олимпиадных задач по информатике и программированию. Это будет очень
способствовать развитию общего уровня учеников и придаст им смелости участвовать и
побеждать в олимпиадах по информатике и программированию.
Но прежде всего надо заметить, что решение задач олимпиадного уровня по
информатике часто требует особых усилий и знаний. И владение этими знаниями и
навыками помогают решению различных проблем в информационной сфере. Недаром
многие известные фирмы, такие как Intel, Microsoft, IBM, Sun HP и другие, при наборе
специалистов проводят тестирование по олимпиадным задачам.
Еще одна практическая ценность наших занятий в том, что по прошествии обучения
для вас не будут представлять трудностей задания второй и третьей частей Единого
Государственного Экзамена.
Основной тип занятий — практическая работа.
Основываемся на занятиях на том, что изучено по школьной программе на уроках
информатики.
Практическая часть.
Задача №1. (Суд идёт)
Судебная коллегия состоит из председателя суда и еще трёх судей. При голосовании за
приговор председатель имеет два голоса, а остальные судьи — по одному. Приговор
считается утвержденным, если больше половины голосов будет отдано в его поддержку.
По результатам голосования судей требуется определить, утвержден ли приговор.
Входные данные
Вводятся четыре числа разделенных пробелами — результаты голосования сначала
председателя суда, а затем остальных трёх судей. Единица означает поддержать приговор,
ноль — отклонить приговор.
Выходные данные
Вывести слово YES (заглавными буквами), если суд принял решение поддержать
приговор, и NO (заглавными буквами), если суд решил отклонить приговор.
Примеры тестов
входные данные
1010
выходные данные
YES
входные данные
0011
выходные данные
NO
Решение
var i,y,n:integer;
x:array[1..4] of integer;
begin for i:=1 to 4 do read(x[i]);
y:=0;n:=0;
for i:=1 to 4 do if x[i]=1then y:=y+1 else n:=n+1;
if y=n then if x[1]=1 then writeln('YES') else writeln('NO')
else if y>n then writeln('YES') else writeln('NO');
end.
Задача №2. (Переверни последовательность)
Вводится 5 чисел. Требуется записать их в обратном порядке, при этом переставив все
цифры в каждом числе в обратном порядке.
Входные данные
Вводятся 5 натуральных чисел, меньших 1000. Числа разделены пробелом.
Выходные данные
Вывести полученную последовательность. Числа не должны содержать ведущих нулей (то
есть не должны начинаться с нуля).
Примеры тестов
входные данные
12345
выходные данные
54321
входные данные
23 543 100 230 7
выходные данные
7 32 1 345 32
Решение
var i:integer;x:array [1..5] of integer;
begin
for i:=1 to 5 do read(x[i]);
for i:=1 to 5 do if x[i] div 100<>0
then x[i]:=(x[i] mod 10)*100+((x[i] div 10) mod 10)*10+x[i] div 100
else if x[i] div 10<>0 then x[i]:=(x[i] mod 10)*10+x[i] div 10;
for i:=5 downto 1 do write(x[i],' ');
end.
Задача №3. (Кубики)
Фабрика по производству настольных игр собирается изготовить N игральных
кубиков. В ходе их изготовления необходимо тщательно обработать поверхность кубиков.
Для этого кубики укладываются в один слой на лоток (не более M штук за один раз), и
шлифовальный круг, вращающийся в горизонтальной плоскости, в течение одной минуты
шлифует верхние грани всех уложенных кубиков одновременно. Затем на лоток
укладывается новая порция кубиков (или те же самые переворачиваются другой гранью
кверху), и снова включается шлифовальный круг. Для уменьшения износа шлифовального
круга желательно минимизировать время его работы.
Требуется составить программу, определяющую минимальное время, которое
необходимо для обработки всех кубиков.
Технические требования:
Входной файл: INPUT.TXT.
Выходной файл:OUTPUT.TXT.
Ограничение по времени тестирования: 1 секунда на один тест.
Формат входных данных:
Входной файл INPUT.TXT содержит два разделённых пробелом целых числа: N
6
6
(0  N  10 ) — количество кубиков и M (1  M  10 ) — вместительность лотка.
Формат выходных данных:
Выходной файл OUTPUT.TXT содержит одно целое число — минимальное время
работы шлифовального круга в минутах.
Пример файла
входных данных:
20 30
64
Решение
Program kubiki;
Var
inf,outf:Text;
n,m,t:LongInt;
Begin
Assign(inf,'input.txt');
Reset(inf);
Readln(inf,n,m);
If n=0 Then t:=0
Else If n<=m Then t:=6
Else Begin
t:=(n*6) div m;
If (n*6) mod m >0 Then Inc(t);
End;
Assign(outf,'output.txt');
Rewrite(outf);
Writeln(outf,t);
Close(outf);
End.
Пример файла
выходных данных:
6
9
Download