Упражнения

A: Четвертная оценка

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

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

Вводится десять натуральных чисел от 2 до 5 через пробел – оценки Васи.

Выведите натуральное число (от 2 до 5) – его четвертную оценку.

Ввод Вывод
2 5 2 5 2 5 2 5 2 5
5
2 2 2 2 2 2 2 2 2 5
2
5 5 5 5 5 5 5 5 5 2
4

B: Пассажиры метро

Для изучения пассажиропотока в метро было записано время входа и время выхода в метро каждого пассажира. На основании этих данных определите, сколько пассажиров было в метро в некоторый заданный момент времени \(T\).

Программа получает на вход число пассажиров \(N\). Далее в \(N\) строчках записано время входа \(A_i\) и время выхода \(B_i\) каждого пассажира (\(A_i\le B_i\)). Время задается в минутах от начала работы метрополитена.

В следующей строке дано время \(T\). Выведите одно число: количество пассажиров в момент времени \(T\). Если какой-то пассажир в момент \(T\) входит или выходит, то его тоже необходимо посчитать.

Ввод Вывод
4
3 12
8 9
5 10
10 12
10
3

C: Навстречу

Дана последовательность чисел. Вывести ее в след. порядке: первое число, последнее, второе, предпоследнее и так далее все числа (см. пример).

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

Выведите числа в требуемом порядке через пробел.

Ввод Вывод
5
1 2 3 4 5
1 5 2 4 3
4
1 2 3 4
1 4 2 3

D: Час пик

Не без вашей помощи в метро посчитали количество пассажиров в каждый час работы метро. Теперь вас просят по этим данным найти “час пик” такие \(k\) подряд идущих часов, что суммарное число пассажиров в эти часы максимальное.

Первая строка входных данных содержит количество часов в сутках, в течение которых работает метрополитен \(N\) (\(1\le N\le 1000\)). Вторая строка содержит \(N\) неотрицательных чисел, записанных через пробел  количество пассажиров в каждый из часов. В третьей строке записана продолжительность часа пик \(K\) (\(1\le k \le N\)).

Найдите \(K\) подряд идущих часов работы метрополитена с максимальным суммарным числом пассажиров и выведите суммарное число пассажиров за эти часы.

Ввод Вывод
7
3 2 5 4 3 2 4
3
12

E: Два совпадающих элемента

В массиве ровно два элемента равны. Найдите эти элементы.

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

Выведите значение совпадающих элементов.

Ввод Вывод
6
8 3 5 4 5 1
5

F: Диаметр множества

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

Первая строка входных данных содержит число точек \(N\). Далее в \(N\) строках записано по два целых числа \(x_i\) и \(y_i\) — координаты точек.

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

Ввод Вывод
3
1 1
1 0
0 0
1.4142135623731

G: Долговые расписки

В одном карточном клубе состоит \(N\) джентльменов. Иногда азарт некоторых из них берет верх над благоразумием, и кто-то проигрывает больше денег, чем у него есть с собой. В этом случае проигравший обычно берет в долг у кого-то из посетителей клуба, чтобы расплатиться с партнерами по игре. Чтобы начать новый год “с чистого листа”, джентльмены решили собраться в клубе и оплатить все долговые расписки, которые накопились у них друг к другу. Однако выяснилось, что иногда одни и те же джентльмены в разные дни выступали как в роли должников, так и в роли кредиторов. Поскольку истинные джентльмены считают мелочный подсчет денег ниже своего достоинства, то расчетами придется заняться вам.

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

Первая строка входных данных содержит сначала число \(N\) — количество джентльменов (натуральное, не превышает 100, не менее 2), и число \(K\) — количество долговых расписок (натуральное, не превышает 10000), после этого следует \(K\) троек чисел: номер джентльмена взявшего в долг, номер джентльмена давшего деньги и сумма. Номера джентльменов в расписках — натуральные числа, не превышающие \(N\). Сумма — натуральное число, не превышает 100. Гарантируется, что ни один джентльмен не брал в долг сам у себя.

Выведите N чисел — суммы, которые должны получить соответствующие джентльмены. Выведите положительное число, если этот джентльмен должен получить деньги от других, отрицательное — если он должен отдать деньги другим.

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

Ввод Вывод
2 3
1 2 10
1 2 20
1 2 20
-50 50
3 1
3 1 100
100 0 -100

H: Треугольник Паскаля

По данному числу \(N\) выведите первые \(N + 1\) строку треугольника Паскаля. Числа в строке разделяйте одним пробелом.

Ввод Вывод
4
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

Указание. Стройте строки треугольника Паскаля последовательно. Заведите два вектора: для хранения последней построенной строки треугольника Паскаля и следующей за ней. Копировать векторы можно при помощи одной операции =.

I: Тапочки

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

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

В первой строке входны данных записано число тапочков \(N\). Во второй строке записаны размеры тапочков в порядке слева направо, при этом левые тапочки условно обозначаются отрицательными числами (то есть \(-s\) обозначает левый тапочек, а \(s\) обозначает правый тапочек размера \(s\)).

Выведите одно число: минимальное расстояние между двумя тапочками одного размера таких, что левый тапочек стоит левее правого. Если таких пар тапочек нет, то выведите одно число 0.

Ввод Вывод
6
-40 41 -42 -41 42 40
2

В примере подходят тапочки 40 размера (расстояние между ними равно 5) и 42 размера (расстояние между ними равно 2).

J: Абсолютный минимум температуры

Метеорологи ведут многолетние наблюдения за тем, в каком году была минимальная температура в данный день года. Например, абсолютный минимум температуры в Москве 8 марта был -32 градуса (1890).

В течение \(k\) лет метеорологи вели наблюдения за \(n\) днями года. Для каждого из этих \(n\) дней укажите минимальную температуру, которая была в этот день за \(k\) лет наблюдений.

Первая строка входных данных содержит два числа \(k\) и \(n\). Далее идет \(k\) строк, \(i\)-я строка содержит \(n\) чисел: значения температур для \(n\) дней наблюдений \(i\)-го года.

Программа должна вывести \(n\) чисел: миниальное значение температуры для каждого из дней наблюдений.

Ввод Вывод
3 4
8 6 4 7
3 2 5 4
6 4 6 3
3 2 4 3

K: Наименьшее количество осадков

Даны результаты метеорологических наблюдений: количество осадков в каждый из 31 дня марта. Метеорологи хотят определить, какая из недель марта была наименее дождливой. Неделя — это семь дней с понедельника до воскресенья, то есть в марте может быть три или четыре полные недели.

Программа получает на вход 31 целое неотрицательное число через пробел: количество осадков для каждого из дней. В следующей строке записано число от 1 до 7: день недели, на который приходится 1 марта (1 означает понедельник, 2  вторник и так далее).

Программа должна определить неделю с наименьшим суммарными числом осадков и вывести суммарное число остатков на этой неделе.

Ввод Вывод
0 4 3 3 4 4 6 2 4 8 3 1 4 5 8 1 6 3 8 4 6 2 9 4 0 5 4 5 1 8 0
4
28

Примечание к примеру. 1 марта — это четверг, поэтому первые четыре дня месяца пропускаются. Остаются следующие недели: 4 4 6 2 4 8 3 (сумма 31), 1 4 5 8 1 6 3 (сумма 28), 8 4 6 2 9 4 0 (сумма 33). Последние шесть дней месяца полной неделей не являются, поэтому не учитываются.

L: Дома и магазины

На Новом проспекте построили подряд \(N\) зданий. Каждое здание может быть либо жилым домом, либо магазином, либо офисным зданием.

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

Первая строка входных данных содержит количество домов на Новом проспекте \(N\). Вторая строка содержит \(N\) чисел, разделенных пробелами. Каждое число задает тип здания на Новом проспекте: число 1 обозначает жилой дом, число 2 обозначает магазин, число 0 обозначает офисное здание. Гарантируется, что на Новом проспекте есть хотя бы один жилой дом и хотя бы один магазин.

Выведите одно целое число: наибольшее расстояние от дома до ближайшего к нему магазина. Расстояние между двумя соседними домами считается равным 1 (то есть если два дома стоят рядом, то между ними расстояние 1, если между двумя домами есть еще один дом, то расстояние между ними равно 2 и т.д.

Ввод Вывод
10
2 0 1 1 0 1 0 2 1 2
3

M: Прыжки с трамплина

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

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

На вход подается 5 натуральных чисел от 1 до 20 , разделенных пробелом.

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

Ввод Вывод
1 2 3 4 5
(1) 2 3 4 (5) = 9
10 11 10 11 10
(10) 11 10 (11) 10 = 31

N: Списывание

На контрольной работе \(N\) учеников сидят в ряд. Для каждого ученика известно, какую оценку он получил бы, если бы писал эту контрольную самостоятельно (оценка — это число от 2 до 5). Однако ученики могут писать контрольную не только самостоятельно, но и списывать у своего соседа, но только если сосед пишет контрольную самостоятельно. В этом случае списывающий получит такую же оценку, какую получит тот, у кого он списал.

А именно (правила применяются строго в указанном порядке):

Определите, кто какую оценку в итоге получит.

Вводится число \(N\) (\(1\le N \le 10\)) — количество учеников, и далее последовательность из N чисел, описывающая, кто на какую оценку может написать контрольную, если будет писать самостоятельно.

Выведите \(N\) чисел — оценки, которые получат ученики за контрольную.

Ввод Вывод Пояснение
5
5 2 3 4 5
5 5 3 5 5
Первый и пятый ученики будут писать самостоятельно. Второй спишет у первого, а четвертый — у пятого (в итоге также получат пятерки). Третьему не у кого списывать, так как его соседи будут писать работу не самостоятельно.
6
2 2 3 2 2 4
2 3 3 3 4 4
Второй и четвертый спишут у третьего, пятый — у шестого.

O: Задача Иосифа Флавия

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

Определите номер человека, который останется в кругу последним.

Программа получает на вход числа \(N\) и \(K\) (\(1\le N\le 100\), \(1\le K\le 10^9\)). и должна вывести одно число от 1 до \(N\).

Ввод Вывод
5 7
4