e-olymp 8288. Олимпиада по программированию

Олимпиада по программированию


На АСМ-олимпиаду прибыло [latex]N[/latex] участников. В результате анкетированные члены жури установили, что [latex]A[/latex] участников программируют на Cи, [latex]B[/latex] на Python, [latex]C[/latex] на Pascal, [latex]X[/latex] одновременно знают Cи и Python, [latex]Y[/latex] — Python и Pascal, [latex]Z[/latex] — Cи и Pascal. Имея значения [latex]N, A, B, C, X, Y, Z[/latex] установите количество участников, которые программируют на трёх языках программирования.

Входные данные

В одной строке через пробел сем действительных чисел [latex]N, A, B, C, X, Y, Z[/latex] значения которых не превышают [latex]100[/latex].

Выходные данные

Единственное число – количество участников, которые программируют на трёх языках программирования.

Тесты

# ВХОДНЫЕ ДАННЫЕ ВЫХОДНЫЕ ДАННЫЕ
1 100 40 50 60 15 20 25 10
2 100 50 60 60 20 40 25 15
3 80 50 40 60 20 30 25 5
4 80 50 40 60 0 0 0 0
5 40 20 30 0 5 0 10 5

Код программы:

Решение задачи:

Алгоритм решения данной задачи состоит в том, чтоб найти разницу между заданным количеством участников, которые одновременно знают по два языка [latex](x + y + z)[/latex], и их возможным количеством [latex](a + b + c — n)[/latex]. Тем самым, мы найдем количество людей, которые знают одновременно 3 языка. Его также можно объяснить используя диаграмму Эйлера-Венна, на которой отмечено семь областей. Нам нужно найти количество участников в [latex]«7»[/latex] области (области одновременного пересечения всех трех кругов). Из условия следует, что [latex]n=«1»+«2»+«3»+«4»+«5»+«6»+«7»[/latex], [latex]a=«1»+«4»+«6»+«7»[/latex], [latex]b=«2»+«5»+«6»+«7»[/latex], [latex]c=«3»+«4»+«5»+«7»[/latex], [latex]x=«4»+«7»[/latex], [latex]y=«5»+«7»[/latex], [latex]z=«6»+«7»[/latex]. И получается, что [latex]\left(\left(«4»+«7»\right)+\left(«5»+«7»\right)+\left(«6»+«7»\right)\right)-\left(\left(«1»+«4»+«6»+«7»\right)+\left(«2»+«5»+«6»+«7»\right)+\left(«3»+«4»+«5»+«7»\right)-\left(«1»+«2»+«3»+«4»+«5»+«6»+«7»\right)\right)=«7»[/latex].

Если же после ввода данных, окажется, что количество людей знающих два языка равно нулю [latex](x + y + z == 0)[/latex], то программа выведет, что людей знающих одновременно три языка также нет.

 

e-olymp 2999. Функция — 10

Задача

Дана функция, аргументы которой – неотрицательные целые числа [latex]m[/latex] и [latex]n[/latex] [latex](m ≤ n)[/latex]:

    [latex]f(m,n)=\begin{cases} 1, \text{ npu } m=0 \\\\ f(m-1,n-1)+f(m,n-1), \text{ npu } 0<m<n \\\\ 1, \text{ npu } m=n \end{cases}[/latex]

Составить алгоритм, вычисляющий значение функции.

Входные данные

Два целых неотрицательных числа [latex]n[/latex] и [latex]m[/latex] [latex](0 ≤ m, n ≤ 20)[/latex].

Выходные данные

Выведите искомое значение заданной функции [latex]f(m, n)[/latex].

Тесты

# Входные данные Выходные данные
1 4 2 6
2 7 7 1
3 12 0 1
4 15 5 3003
5 10 6 210

Код программы

Решение задачи

Для того, чтобы решить задачу, нам необходимо составить алгоритм, который будет вычислять значение заданной функции в зависимости от значения её аргументов. Для этого создадим специальную функцию [latex]f[/latex].
Строки 4 — 6 кода составляют тело функции. Программа выбирает, какую операцию ей нужно выполнить, в зависимости от определенного условия:

  1. Если [latex]m = 0[/latex] или [latex]m = n[/latex], то программа возвращает единицу.
  2. Если [latex]m < n[/latex], то программа вычисляет значение функции по формуле [latex]f(m — 1,n — 1)+f(m,n — 1)[/latex]

Далее в главной функции main() мы вызываем нашу функцию [latex]f[/latex] с помощью новой переменной [latex]d[/latex] и выводим результат.

Ссылки

Ссылка на e-olymp

Ссылка на ideone

e-olymp 7234. Кондиціонер Степана

Задача

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

Кондиціонер може працювати в наступних чотирьох режимах:

  • «freeze» — охолодження. У цьому режимі кондиціонер може тільки зменшувати температуру. Якщо температура в кімнаті і так не більше бажаної, то він вимикається.
  • «heat» — нагрів. У цьому режимі кондиціонер може тільки збільшувати температуру. Якщо температура в кімнаті і так не менше бажаної, то він вимикається.
  • «auto» — автоматичний режим. У цьому режимі кондиціонер може як збільшувати, так і зменшувати температуру в кімнаті до бажаної.
  • «fan» — вентиляція. У цьому режимі кондиціонер здійснює тільки вентиляцію повітря і не змінює температуру в кімнаті.

Кондиціонер досить потужний, тому при налаштуванні на правильний режим роботи він за годину доводить температуру в кімнаті до бажаної.

Потрібно написати програму, яка по заданій температурі в кімнаті [latex]t_{room}[/latex], встановленим на кондиціонері бажаної температурі [latex]t_{cond}[/latex] і режиму роботи визначає температуру, яка встановиться в кімнаті через годину.

Входные данные

Перший рядок вхідного файлу містить два цілих числа [latex]t_{room}[/latex], і [latex]t_{cond}[/latex], розділених рівно одним пропуском [latex](-50 ≤ t_{room}. ≤ 50 [/latex],[latex]-50 ≤ t_{cond}. ≤ 50)[/latex]. Другий рядок містить одне слово, записане малими літерами латинського алфавіту — режим роботи кондиціонера.

Выходные данные

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

Тесты

Входные данные Выходные данные
10 20 heat 20
10 20 freeze 10
20 10 auto 10
20 20 freeze 20

Код программы

Решение задачи

Для решения этой задачи я построил таблицу, в которой рассмотрел все возможные варианты.

Режим работы [latex]tr>tc[/latex] [latex]tr>tc[/latex] [latex]tr=tc[/latex]
freeze tc tr tc
heat tr tc tc
fan tr tr tr
auto tc tc tc

Из этой таблицы видно, что повторяется tc 7 раз, а tr — 5 раз. Поэтому опишем в операторе if все условия при которых температура в комнате будет равняться желаемой температуре через час, а во всех остальных случаях температура не изменится.

Ссылки

  • Задача на сайте e-olymp
  • Код решения в Ideone

e-olymp 918. Какая четверть?

Задача

Задана точка с координатами [latex]x[/latex] и [latex]y[/latex]. Определить, в какой координатной четверти она расположена.

Входные данные

В единственной строке через пробел заданы [latex]2[/latex] вещественных числа — координаты точки, значения координат по модулю не превышают [latex]100[/latex].

Выходные данные

Единственное число — номер соответствующей четверти, либо [latex]0[/latex] , если однозначно определить четверть невозможно.

Тесты

Входные данные

Выходные данные
[latex]x[/latex] [latex]y[/latex] Четверть
12 31 1
-10 18 2
-15 -25 3
13 -13 4
0 0 0

 

Решение

Четверти координатной плоскости

В прямоугольной системе координат на плоскости выделяют 4 четверти: 1, 2, 3, 4.
1-й четветри соответствуют точки, имеющие обе ([latex]x[/latex] и [latex]y[/latex]) положительные координаты.
2-ая четверть: [latex]x \lt 0[/latex], [latex]y \gt 0[/latex].
3-ая четверть: [latex]x \lt 0[/latex], [latex]y \lt 0[/latex].
4-ая четверть: [latex]x \gt 0[/latex], [latex]y \lt 0[/latex].
Точка с координатами ([latex]0[/latex];[latex]0[/latex]), находится в начале координат.
Если точка лежит на оси [latex]«Oy»[/latex], то её абсцисса равна [latex]0[/latex].
Если точка лежит на оси [latex]«Ox»[/latex], то её ордината равна [latex]0[/latex].

Ссылки

e-olymp
Ideone

Ю 2.27. Шашечный эндшпиль

Задача из сборника задач по программированию Юркина А.Г. 2002 г.
Условие задачи:
В шашечном эндшпиле остались белая дамка и две черных пешки, позиции которых известны. Ход белых. Сможет ли дамка срубить одну или сразу обе пешки?
Continue reading