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

Олимпиадные задачи по программированию с решением

Дата добавления: 2011-06-27
Будина Н.В.

Линейные программы.

Кубики. Кубик с ребром N см покрасили и разрезали на кубики с ребром 1 см. При этом появились такие, у которых окрашено разное количество граней. Например, если N = 3, то после разрезания будет 8 кубиков, у которых окрашено три грани, 12 с двумя гранями, 6 с одной, а один кубик будет совсем неокрашенный. Составьте программу, которая бы определяла, сколько кубиков с каждой возможным количеством окрашенных граней.

Технические условия

Имя программы

CUBES.*

Ввод

С клавиатуры вводится целое число N (от 1 до 1292)

Вывод

На экран или форму выводятся различные варианты окрасок и их количества в формате: количество_окрашеных_граней/количество_кубиков в порядке возрастания первого параметра

Пример

Ввод

Вывод

0/1 1/6 2/12 3/8

Ветвление

Отрезок. Отрезок на плоскости задается двумя несовпадающие конечными точками A (x1; y1) и B (x2; y2). С точки С (х3; у3) к прямой, содержащей отрезок АВ, проводится перпендикуляр г. Определить, попадает перпендикуляр на отрезок АВ или на его продолжение.
Во входном файле содержится три пары чисел, являющихся координатами точек А, В, С. В файле содержится ответ «На отрезок» или «На продолжение».
Пример входного и выходного файлов

Файл Z1.dat

Файл Z1.rez

3 3
6 2
8 4

На продолжение

Dlina. Дано целое N> 2 и действительные числа a1, b1, … an, bn. (ai, bi). Рассматривая пары чисел ai и bi, как левые и правые концы отрезков на одной и той же прямой, определить концы отрезка, являющегося пересечением всех этих отрезков. Если такого числа нет, то сообщить об этом. Во входном файле в первой строке задается число N, в следующих N строках — координаты концов отрезков; в файле выводятся координаты концов отрезка, являющегося пересечением всех этих отрезков, или сообщение «Нет пересечения».

Файл DLINA.DAT

Файл DLINA.SOL

3
1 2
3 4
5 6

Нет пересечения

3
1 10
3 7
4 8

Digit. В положительном целом числе вычеркнуть цифру так, чтобы число, которое осталось, было наибольшим.

Входной файл Digit.dat

Выходной файл Digit.sol

Пример 1
Пример 2

321
123

32
23

LESSON. В первом полугодии 2007-08 учебного года занятия проходят с 1 по 8 и с 10 по 17 недели (девятая неделя — каникулы). В расписании одного из классов пять дней в неделю (с понедельника по пятницу) происходит по шесть уроков ежедневно, всего 480 уроков за полугодие. Все эти уроки пронумерованы. Составьте программу, определяющую, на какой неделе и какой день недели проходит урок с данным номером N.

Технические условия

Имя программы

LESSON.*

Из входного файла считывается целое число — номер урока N(от 1 до 480). В выходной файл выводятся номер недели и название дня (на украинском, русском или английском языке)

Пример

Week 8 Friday

Week 10 Monday

Места. В плацкартном вагоне 54 места, которые расположены в девяти купе. Места от 1 до 36 основные и они расположены по четыре в купе (1 — 4 в первом, …, 33 — 36 в девятом), от 37 до 54 — боковые, разбиты по два, но расположение по купе обратное: места 37, 38 находятся в девятом купе, 39 и 40 в восьмом, …, 53 и 54 в первом. По номеру места определите номер купе.

Технические условия

Имя программы

VAGON.*

Ввод

С клавиатуры вводится целое число — номер места (от 1 до 54)

Вывод

На экран выводится целое число — номер купе

Пример

Ввод

Вывод

Кубики. Кубик с ребром N см покрасили и разрезали на кубики с ребром 1 см. При этом появились такие, у которых окрашено разное количество граней. Например, если N = 3, то после разрезания будет 8 кубиков, у которых окрашено три грани, 12 с двумя гранями, 6 с одной, а один кубик будет совсем неокрашенный. Составьте программу, которая бы определяла, сколько кубиков с каждой возможным количеством окрашенных граней.

Технические условия

имя программы

CUBES.*

Ввод

С клавиатуры вводится целое число N (от 1 до 1292)

Вывод

На экран или форму выводятся различные варианты окрасок и их количества в формате: количество_окрашеных_граней/количество_кубиков в порядке возрастания первого параметра

Пример

Ввод

Вывод

0/1 1/6 2/12 3/8

Цикли

Задача 1 На интервале найти количество натуральных чисел вида 3d5p (d, p — положительные целые числа).
Пример входного и выходного файлов

Файл Z1.dat

Файл Z1.rez

3000 3100

Задача 2. Задана строка, состоящий из цифр и букв. Найти сумму цифр, записанных в строке. В случае, если строка не содержит ни одной цифры, вывести сообщение «Цифр нет».
Пример входного и выходного файлов

Файл Z1.dat

Файл Z1.rez

1авк25ннн

REBUS.Составить программу REBUS, которая определяет все 4-значные числа на интервале , удовлетворяющие условиям:
a) abcd — 4-цифровое число;
b) a, b, c, d — разные цифры;
c) ad — cd = a + b + c + d;
и подсчитывает общее количество этих чисел.
Во входном файле REBUS.DAT в 1-м и 2-й строчках находятся два числа M и N. В файле REBUS.SOL выводятся числа, удовлетворяющие условиям а)-с), и их количество.

файл REBUS.DAT

файл REBUS.SOL

5128
5467

5139
5302
2

DATES. Даны две календарные даты. Вычислите количество дней между ними.
Данные вводятся в файл в формате «ДД.ММ.ГГГГ», де ДД – день, ММ – месяц, ГГГГ – год.

Файл DATES.DAT

Файл DATES.SOL

21.01.1996
22.01.1996

01.02.1996
01.03.1996

DATES. Стрелки часов движутся с постоянными угловыми скоростями и показывают h часов m минут. Найти число полных минут до того времени, когда стрелки совпадут.
Данные вводятся из файла DATES.DAT в формате «hm». В файл DATES.SOL выводится количество полных минут.

DATES. SOL

Пример 1
Пример 2

0 0
1 1

0
5

Lift. Чтобы поднять на N-й этаж M-этажного дома новый холодильник, Витя вызвал бригаду грузчиков. Оплата работы грузчиков рассчитывается так: за подъем холодильника на один этаж требуется заплатить 200 гривен, за спуск на один этаж — 100 гривен. За подъем и спуск на лифте плата не взимается. Несмотря на то, что в доме есть лифт, Вите возможно все же придется заплатить грузчикам, поскольку лифт останавливается только на каждом K-м этаже, начиная с первого (то есть на этажах с номерами 1, K +1, 2K +1, 3K +1, …). Нужно вычислить, какой минимальной суммы денег достаточно, чтобы грузчики доставили холодильник с первого этажа на N-й.
Во входном файле записаны три числа: M (2 <= M <= 100), N (2 <= N <= M) и K (2 <= K <= M-1), разделенные пробелами.
В выходной файл выведите одно число — минимальную стоимость подъема холодильника.

Файл Lift.dat

Файл Lift.sol

Пример 1

20 7 4

Пример 2

20 7 2

«Несчастливые пиковые» числа. Трехзначное число назовем «пиковым», если его цифра десятков будет больше цифры единиц и сотен (напр., число 276 — «пиковое», а 954 и 277 — нет). Составьте программу, которая подсчитывает, сколько «пиковых» чисел находится на отрезке и сколько из них делятся без остатка на 13.

Технические условия

Имя программы

PICK.*

Ввод

два целых числа 100 <= Aі <= Bі <= 999

Вывод

В текстовый файл PICK.SOL выводится количество «пиковых» чисел и тех из них, которые делятся без остатка на 13

Пример

объяснение

135 145

4 1

В первом тесте на промежутке 135-145 находится 4 пиковых числа: 140, 141, 142, 143 и 143 делится без остатка на 13, во втором тесте числа 120 и 121 на 13 не делятся

Добавление. Число, которое одинаково читается слева направо и наоборот, называется палиндромом, напр., 3773. Возьмем произвольное число N (от 10 до 10000). Если оно не палиндром, добавим к нему число, состоящее из тех же цифр, но записанных в обратном порядке. Будем повторять эту операцию, пока не получим палиндром (если это возможно). Например, N = 49, 49 +94 = 143, 143 +341 = 484. Напишите программу, которая бы определяла, можно из заданного числа N получить палиндром, и если возможно, то за какое минимальное количество добавлений. Если меньше, чем за 100 добавлений это сделать невозможно, вывести на экран -1.

Технические условия

Имя программы

ADDS.*

Ввод

С клавиатуры вводится целое число N (від 10 до 10000)

Вывод

На экран или форму выводится минимальное количество добавлений для получения палиндрома или -1, если за 100 добавлений это сделать невозможно

Пример

Ввод

Вывод

Массивы

Hacker. Департамент финансовой поддержки малоимущих использует в своей работе три электронных списки: всех студентов, список всех школьников и список всех учителей. Понятно, что нельзя присутствовать во всех трех списках одновременно. Однако, компьютерный взломщик — хакер проник во все списки и незаконно получает деньги в тройном размере. Объемы списков настолько огромны, что без помощи компьютерной программы хакера не поймать. Составьте программу ХАКЕР, что: 1. Вводит списки людей из текстовых файлов STUDENT.DAT, PUPILS.DAT, TEACHER.DAT;
Находит человека, который присутствует во всех трех списках;
Выводит результат в текстовый файл HACKER.SOL.
В исходных файлах информация располагается следующим образом: каждая строка содержит последовательность из 10 цифр — код социального страхования одного человека; этот код однозначно описывает будб — любого гражданина страны, в том числе и хакера; в каждом файле последовательность кодов упорядоченная по возрастанию. Единственная строка выходного файла должно содержать код хакера.

Sport. В беге участвуют N спортсменов. Результаты забегов занесены в массив по порядку номеров участников. Определить время (результат) бронзового призера.
Программа должна читать данные из текстового файла RUN.DAT следующего формата:
1-я строка содержит количество участников забега;
Следующие строки содержат время каждого участника забега (по одному в каждой строке) в последовательности номеров участников.
Результат работы программы содержится в файле RUN.SOL.

Файл RUN.DAT

Файл RUN.SOL

5
25
19
22
17
18

TAB. Заполнить прямоугольную таблицу размерности NxM (M> N) вложенными рамками, каждая из которых изображается числом, равным разности между N и номером рамки. Внешнюю рамку считать первым. Пример для N = 5, M = 8:

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

Файл Z.dat

Файл Z.rez

3 3

2 2 2
2 1 2
2 2 2

Виза. Жители одного государства очень любят различные математические головоломки. Даже тот, кто желает получить въездную визу, должен решить задачу: отыскать ключевое слово. Условие задачи таковы: На листке написано несколько длинных чисел. Если сложить все цифры в каждом числе, выйдут новые числа. Далее следует сложить все цифры в каждом из вновь полученных чисел. Процесс надо продолжать до тех пор, пока в результате не останутся числа меньше 10. После этого все просто: числа от 0 до 9 — это номера букв в алфавите (в этом государстве алфавит состоит всего из десяти букв). Замена чисел буквами и дает ключевое слово. Напишите программу, которая будет отыскивать ключевое слово.

Имя программы

VIZA.*

Пример

объяснение

АГЕИКЛМОРТ
4
8267
19929
54262
000000000000

ЛИГА

Во входном файле:
Первая строка — алфавит государства: десять букв, расположенных по возрастанию порядковых номеров без пробелов.
Вторая строка — количество чисел (N <= 255)
Следующие N строк — именно начальные числа (по одному в строке, в каждом не более 255 цифр).
Формат выходного файла:
Ключевое слово

Лайнеры. 5 декабря 2009 в порту P собралось N круизных лайнеров, совершающих регулярные рейсы и возвращаются к этому порту через ti дней. Какого числа они первый раз снова появятся вместе в этом порту?

Технические условия

Имя программы

SHIPS.*

Ввод

С клавиатуры вводится количество лайнеров N — целое число от 2 до 10. А затем N целых чисел — периоды их рейсов в днях (целые числа от 1 до 30).

Вывод

На экран или форму выводится дата их возвращения в формате DD/MM/YYYY. Гарантируется, что эта дата не превышает 31/12/2012

Пример

Ввод

Вывод

3
6 4 8

Морской бой. Полем для игры «Морской бой» является квадрат 10х10 ячеек. Столбцы обозначаются заглавными латинскими буквами от A до J слева направо, а строки цифрами от 0 до 9 снизу вверх. На этом поле первый игрок тайно размещает один корабль размером 1х4 ячейки, два — 1х3, три 1х2 и четыре корабля из одной ячейки, которые размещаются в одном столбце или одной строке каждый, притом ячейки различных кораблей не являются соседями по горизонтали, вертикали или диагонали. Второй игрок называет последовательность полей обстрела, напр., A7 C0 J4, а первый игрок извещает их результативность: B (мимо корабли) W (корабль ранен) K (корабль погиб, потому выстрелы попали во все ячейки данного корабля). Составьте программу, которая бы самостоятельно выдавала сообщение первого игрока.

Технические условия

Имя программы

SEAWAR.*

Ввод

В 10 строках файла SEAWAR.DAT описывается позиция кораблей первого игрока сверху вниз по 10 символов в строке: точек «.» Для пустых ячеек и больших латинских букв «Х» — наличие корабля. В 11 строке количество выстрелов N (от 5 до 15) и направления их ударов.

Вывод

В файл SEAWAR.SOL выводится строка из N латинских букв B, W или K

Пример

ХХХХ……
……..XX
X.X.X…..
…….X..
.XX….X..
…….X..
……….
…X…..X
………X
.XX……X
7 D1 D2 D3 H4 H5 H3 H6

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *