Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть сборника.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
488.45 Кб
Скачать

Содержание

Содержание 1

В ожидании Нового года 2

Золотые яйца 3

Куб со спицами 5

Отгадай слово 6

Инкубатор Бабы Яги 9

Сумма 0, произведение N 11

Отрезки с наложением 12

Расписные салфеточки 14

Сколько прошло дней? 16

Арифметическая прогрессия 18

Нарезка фантиков 21

Шагающий циркуль 23

Волшебные горшочки Бабы Яги 25

Стиральный вопрос 26

Чудик в Цветландии 31

Столовая 33

Рейтинг студента 36

Лена и зеркало 39

Макет города 41

Мосты-горки 43

В ожидании Нового года Условие

31 декабря. Марфа Геннадьевна и Глафира Сергеевна уже приготовили новогодний ужин, и теперь они с нетерпением ждут Нового года.

Каждые 5-10 минут они смотрят на часы и вычисляют, сколько часов и минут осталось до Нового года. При этом на вычисление у них уходит много времени.

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

Число секунд в текущем времени принять равным 0.

Формат входного файла

Входной файл содержит текущее время — часы и минуты.

Формат выходного файла

Требуется вывести в выходной файл, сколько времени осталось до Нового года — часы и минуты.

Ограничения

Часы от 0 до 23. Минуты от 0 до 59.

Примеры тестов

Входной файл

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

1

12 0

12 0

2

23 59

0 1

3

22 25

1 35

Разбор

Если число минут в текущем времени равно 0, то до Нового года осталось (24 − H) часов и 0 минут, где H — число часов в текущем времени.

Если число минут в текущем времени не равно 0, то до Нового года осталось (24 − H − 1) часов и (60 − M) минут, где M — число минут в текущем времени.

program new_year;

var

h, m: integer;

rh, rm: integer;

begin

assign(input, 'input.txt');

reset(input);

assign(output, 'output.txt');

rewrite(output);

read(h, m);

if (m = 0) then

begin

rh := 24-h;

rm := 0;

end

else

begin

rh := 24-h-1;

rm := 60-m;

end;

write(rh, ' ', rm);

close(input);

close(output);

end.

Золотые яйца Условие

В некотором царстве, некотором государстве жила-была Марфа Геннадьевна. И была у Марфы Геннадьевны курочка, которая, кроме обычных яиц, иногда несла золотые яйца.

Марфа Геннадьевна заметила, что очень часто золотое яйцо появляется в полнолуние, и решила исследовать данное явление. Она записала даты появления золотых яиц в течение года. Теперь Марфа Геннадьевна хочет подсчитать, сколько раз курица снесла золотое яйцо в полнолуние.

У Марфы Геннадьевны есть волшебный компьютер, который может выполнить любую программу. Чего нет у Марфы Геннадьевны — так это волшебного программиста, который мог бы написать любую программу.

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

В государстве, в котором живёт Марфа Геннадьевна, для летоисчисления используются 12 месяцев, в каждом месяце ровно 30 дней. Полнолуние происходит каждые 29 дней: 1 января, 30 января, 29 февраля и т.д.

Формат входного файла

Входной файл содержит целое число N — количество появлений золотых яиц в течение года.

Далее следуют даты появления золотых яиц — пары целых чисел: день и месяц.

Во входном файле не может быть двух одинаковых дат.

Формат выходного файла

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

Ограничения

1 ≤ N ≤ 100

Примеры тестов

Входной файл

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

1

3

2 1

1 1

29 2

2

2

2

28 3

29 3

1

Разбор

Для каждой даты появления золотого яйца необходимо проверить, было ли в этот день полнолуние. Если было, то нужно увеличить значение переменной-счётчика на 1.

Как проверить, было ли в данный день полнолуние? Заметим, что полнолуние происходит 1 января, а также в те дни, когда сумма дня и месяца равняется 31.

program gold_eggs;

var

d,m: array[1..100] of integer;

n: integer;

cnt: integer;

i, j: integer;

begin

assign(input, 'input.txt');

reset(input);

assign(output, 'output.txt');

rewrite(output);

read(n);

for i := 1 to n do

read(d[i], m[i]);

cnt := 0;

for i := 1 to n do

begin

if ((d[i] = 1) and (m[i] = 1) or (d[i]+m[i] = 31)) then

inc(cnt);

end;

write(cnt);

close(input);

close(output);

end.

Куб со спицами

Условие

Возьмём N3 одинаковых кубиков. Раскрасим кубики в N цветов так, чтобы в каждый цвет было раскрашено ровно N2 кубиков. Сложим из всех кубиков один большой куб. Начнём протыкать этот куб спицами параллельно его рёбрам. Любая спица пройдёт сквозь ровно N кубиков.

Требуется сложить куб так, чтобы любая спица проходила сквозь кубики всех N цветов.

Формат входного файла

Во входном файле содержится единственное натуральное число N.

Формат выходного файла

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

Ограничения

1  N  100

Примеры тестов

Входной файл

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

1

2

1 2

2 1

2 1

1 2

Разбор

Сперва рассмотрим задачу с квадратом: требуется расставить в клетках квадратной таблицы NN числа от 1 до N так, чтобы в каждой строке и в каждом столбце встречались все N чисел (каждое число по одному разу). Таблица, заполненная таким образом, называется латинским квадратом.

Как построить латинский квадрат NN? Запишем в первой строке числа от 1 до N. Во второй строке запишем числа на единицу больше, чем стоящие выше. При этом, если сверху стоит число N, то снизу будет стоять 1. Следующие строки заполняются аналогично.

1 2 3

2 3 1

3 1 2

Заметим, что число, стоящее в i-й строке и j-м столбце, можно вычислить по формуле 1 + (i + j) mod N.

Перейдём к задаче с кубом. Будем заполнять куб от ближней грани к дальней. Ближайшую к нам грань заполним так, как мы заполняли квадрат, а следующую грань заполним следующим образом: прибавим к числам, стоящим на ближайшей грани, единицу. Следующие грани заполняются аналогично.

1 2 3

2 3 1

3 1 2

2 3 1

3 1 2

1 2 3

3 1 2

1 2 3

2 3 1

program cube;

var

n: integer;

i, j, k: integer;

begin

assign(input, 'input.txt');

reset(input);

assign(output, 'output.txt');

rewrite(output);

read(n);

for k := 1 to n do

begin

for j := 1 to n do

begin

for i := 1 to n do

write(1 + (i+j+k) mod n, ' ');

writeln;

end;

end;

close(input);

close(output);

end.