e-olymp 926. Формула Герона

Задача

Задано стороны [latex]a[/latex], [latex]b[/latex], [latex]c[/latex], [latex]d[/latex] и диагональ [latex]f[/latex] выпуклого четырехугольника. Определить площадь четырехугольника, используя вспомогательную функцию вычисления площади треугольника по формуле Герона.

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

В одной строке задано [latex]5[/latex] действительных чисел [latex] a, b, с, d, f [/latex] [latex]( 0 < a, b, c, d, f \leqslant 100 )[/latex], как показано на рисунке.

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

Вывести площадь четырехугольника с точностью [latex]4[/latex] знака после десятичной точки.

Тесты

# Входные данные Выходные данные
1 2 2 2 2 2 3.4641
2 7 7 5 6 2 11.6120
3 9 5 3 2 4 2.9047
4 5 7 2 3 4 12.7027
5 7 8 6 2 5 22.0043

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

Решение

  • Воспользуемся формулой Герона [latex] S = \sqrt{p \cdot(p-a) \cdot(p-b) \cdot(p-c)}[/latex] для каждого из двух треугольников
  • Сложим полученные результаты

Важно отметить, что в условие задана точность вычисления. Укажем это в соответствующем месте вывода :

Ссылки

Задача на e-olymp

Код задачи на ideone

e-olymp 7337. Скидки

Задача

В супермаркете электроники, если верить телерекламе, существует система скидок: из двух купленных товаров полностью оплачивается только стоимость товара, который дороже, а другой отдается бесплатно. Какой суммы достаточно, что бы оплатить покупку трёх товаров, если известна цена каждого?
Входные данные: три натуральных числа $a, b, c$ — цены трёх товаров $(1\leq a, b, c\leq10000)$.
Выходные данные: стоимость покупки.

Тесты

Входные данные Выходные данные
213   6554   234
6767
320   3670   5555
5875
15   47   13
60
215   30   73
245
370   53   823
876

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

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

Для нахождения самого дорогого и самого дешёвого товаров мы используем встроенные методы  Math.max()  и Math.min()  из класса Math. Находим минимальное число из чисел $a, b$ и $c$: Math.min(Math.min(a, b), c) (например: Math.min(Math.min(1, 2), 3) будет равно $1$). Далее проводим такую же операцию с нахождением максимального числа среди $a, b, c$:  Math.max(Math.min(a, b), c) (пример:  Math.max(Math.min(1, 2), 3) будет равно $3$). Затем суммируем полученные минимальное и максимальное числа и получаем ответ.

Ссылки

Условие задачи на e-olymp.com
Решение задачи на ideone.com

e-olymp 1474. Сломанные часы

Задача

Broken Clocks

В электронных часах произошел сбой, и теперь каждую секунду увеличивается не счетчик секунд, а счетчик часов. При переполнении счетчика часов (то есть при достижении $24$) он сбрасывается в $0$ и увеличивается счетчик минут. Аналогично, при переполнении счетчика минут происходит его сброс и увеличивается счетчик секунд. При переполнении счетчика секунд он также сбрасывается в $0$, а остальные счетчики так и остаются равными $0$. Известно, что сбой произошел в $h_1$ часов $m_1$ минут $s_1$ секунд. В этот момент часы показывали правильное время.

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

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

В первой строке задаются три целых числа $h_1$, $m_1$, $s_1$, определяющие время поломки часов. Во второй строке записаны три числа $h_2$, $m_2$, $s_2$, которые определяют показания часов в текущий момент времени ( $0\;\le\;h_1,\;h_2\;\lt\;24$, $0\;\le m_1,\;m_2,\;s_1,\;s_2\;\lt\;60$ ).

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

В единственной строке выведите правильное время (т.е. число часов, минут и секунд) в момент, когда сломанные часы будут показывать $h_2$ часов $m_2$ минут $s_2$ секунд.

Тесты

Входные данные Выходные данные
$12\;0\;0$
$12\;1\;0$
$12\;0\;24$
$13\;59\;59$
$12\;59\;59$
$13\;59\;58$
$15\;12\;16$
$15\;12\;16$
$15\;12\;16$
$0\;0\;0$
$23\;59\;59$
$23\;59\;59$
$16\;0\;17$
$16\;0\;18$
$16\;24\;17$
$11\;0\;53$
$0\;0\;0$
$13\;48\;42$
$1\;13\;18$
$22\;51\;32$
$7\;4\;51$

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

Решение

Учитывая особенности хода сломанных часов, подсчитаем количество секунд в начальный и конечный моменты времени (  sum1  и sum2 ). Вычислим, сколько секунд прошло с момента поломки часов — для этого найдём разность sum2 - sum1 , прибавим $86400$ —  количество секунд в сутках (поскольку мог произойти переход через момент времени $0\; : \;0\; : \;0$) и найдём остаток от деления полученной суммы на $86400$.

Теперь найдём количество секунд, прошедших с начала суток, в которых поломались часы ( time1 ). Прибавим к нему количество секунд, прошедших с момента поломки часов и найдём остаток от деления на $86400$ полученного числа. Имеем  time2  — правильное время в секундах. Далее, находим значения счётчиков часов $h_3$, минут $m_3$ и секунд $s_3$ которые соответствуют моменту времени  time2.

Ссылки

Условие задачи на e-olymp
Решение на ideone
Решение на e-olymp

e-olymp 7369. Километровые столбы (Mileposts)

Задача

Андрей очень любит ездить по железной дороге. Он садится у окна и внимательно следит за местностью, которую он проезжает. Особенно он обращает внимание на километровые столбы. Каждый столб с километражем, который при делении на $7$ дает в остатке $3$, он считает «счастливым». Составьте программу, которая бы определяла количество «счастливых» столбов, если во время езды он проезжает столбы с отметками от $a$ до $b.$

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

Два натуральных числа $a$ и $b$ ($0 \leq a \lt b \leq 10^9$).

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

Вывести количество «счастливых» столбов.

Тесты

Входные данные Выходные данные
$0$ $5$ $1$
$26$ $49$ $3$
$73$ $80$ $2$
$5$ $8$ $0$
$17$ $37$ $3$

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

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

Количество «счастливых» столбцов $l$ от $0$ до $n$, то есть количество натуральных чисел $k$ от $0$ до $n$, таких, что $k \mod7 = 3$, равно количеству чисел от $0$ до $n-3$, делящихся нацело на $7$, увеличенному на $1.$ То есть $l = \lfloor \frac{n-3}{7} \rfloor +1 = \lfloor \frac{n+4}{7} \rfloor$. Тогда количество «счастливых» столбов на промежутке от $a$ до $b$ равно разности количества «счастливых» столбов на промежутке от $0$ до $b$ и количества «счастливых столбов» на промежутке от $0$ до $a$ не включительно. Отсюда получаем итоговую формулу решения, указанную в коде программы.
Поясним теперь использование класса java.io.BufferedReader вместо java.util.Scanner. Класс Scanner предоставляет удобный высокоуровневый инструментарий для парсинга целых чисел из входного потока, за что приходится расплачиваться производительностью. В силу достаточно малого ограничения по времени на работу программы мы вынуждены использовать более низкоуровневый инструментарий для чтения строки с параметрами из входного потока и самостоятельно парсить ее.

Ссылки

Условие задачи на e-olymp

Решение задачи на e-olymp

Код решения

ML3

Задача

Дана длина ребра куба. Найти объем куба и площадь его полной поверхности.

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

Длина ребра куба $latex a$.

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

Объем куба и площадь его полной поверхности.

Тесты

a V S
1.7 4.91299 17.34
3 27 54
5 125 150

Решение

Задаем длину ребра куба и получаем объем куба и площадь его полной поверхности согласно формулам: $latex V=a^3$ и $latex S=6a^2$.

Пример работы программы можно увидеть на ideone.

ML 24

Условие задачи:

Треугольник задан длинами сторон. Найти радиус вписанной [latex]r[/latex] и описанной [latex]R[/latex] окружностей.

Тесты:

[latex]a[/latex] [latex]b[/latex] [latex]c[/latex] [latex]r[/latex] [latex]R[/latex]
3 4 5 1 2.5
7.5 10 13 2.45012 6.52361
1 3 4 0 inf
1 1 3 Не существует! Не существует!

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

 

Алгоритм:

Проводим следующие вычисления (порядок сохранен):

  1. Вычисляем полупериметр [latex]p[/latex] треугольника: [latex]p[/latex] = [latex]\frac{a + b + c}{2}[/latex]
  2. Находим площадь [latex]S[/latex] по формуле Герона: [latex]S[/latex] = [latex]\sqrt{p(p-a)(p-b)(p-c)}[/latex]
  3. Вычисляем радиус [latex]r[/latex] вписанной окружности по формуле: [latex]r[/latex] = [latex]\frac{S}{p}[/latex]
  4. Вычисляем радиус [latex]R[/latex] описанной окружности по формуле: [latex]R[/latex] = [latex]\frac{abc}{4S}[/latex]

Работающая версия программы на Ideone.com

Ссылка на источник

e-olymp 935. Разложение три цифрового числа

Постановка задачи

Разложить заданное трицифровое число на цифры.

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

В единственной строке задано целое трицифровое число.

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

Вывести каждую цифру в новой строке. Порядок вывода приведён в примере.

Тесты

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

3

5

2 267 2

6

7

3 -178 1

7

8

Код

Описание решения

Для начала задаем переменную(a) в которой будет трехзначное число, которое мы вводим с клавиатуры. Затем проверяем: отрицательное или положительное это число. Для того чтобы получить первую цифру этого числа воспользуемся простой формулой $latex a/100$ , вторую цифру по формуле — (a / 10) % 10, и третью a % 10.

Посмотреть, как работает программа со входными данными — 173 можно на сайте  ideone.

ML7

Постановка задачи

Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь.

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

Катеты прямоугольного треугольника — [latex]a[/latex] и [latex]b[/latex]

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

Площадь прямоугольного треугольника — [latex]area[/latex]

Гипотенуза прямоугольного треугольника — [latex]c[/latex]

Тесты

Входные данные Выходные данные
1 8 6 24 10
2 4 3 6 5
3 3 6 9 6.70

Решение:

Описание решения

Объявляем переменные  a, b, c, area типа  double , где  a, b  — катеты прямоугольного треугольника,  c  — гипотенуза, а  area  — площадь треугольника. Далее с клавиатуры вводим значения катетов прямоугольного треугольника. После чего по формуле площади треугольника и теореме Пифагора вычисляем площадь и гипотенузу треугольника. Для возведения в степень 2, будем использовать функцию  Math.pow() , для нахождения корня  Math.pow() .  В результате выводим значения площади  area  и гипотенузы  c  с помощью функции  System.out.println() .

KM17. Крестьянин на развилке

Задача из журнала «Квант» №4 1970 г.

Крестьянин, подойдя к развилке двух дорог, расходящихся под углом 60°, спросил: «Как пройти в село [latex]NN[/latex]?». Ему ответили: «Иди по левой дороге до деревни [latex]N[/latex] — это в восьми верстах отсюда,— там увидишь, что направо под прямым углом отходит большая ровная дорога,— это как раз дорога в [latex]NN[/latex]. А можешь идти другим путём: сейчас по правой дороге; как выйдешь к железной дороге,— значит, половину пути прошёл; тут поверни налево и иди прямо по шпалам до самого [latex]NN[/latex]». — «Ну, а какой путь короче-то будет?» — «Да всё равно, что так, что этак, никакой разницы.» И пошёл крестьянин по правой дороге. Сколько вёрст ему придётся идти до [latex]NN[/latex]? Больше десяти или меньше? А если идти от развилки до [latex]NN[/latex] напрямик? (Все дороги прямые)

Более лаконичная версия:
Крестьянин стоит на развилке дорог, которые расходятся под углом 60°, и хочет попасть в село [latex]NN[/latex]. Выбрав левую дорогу, он должен будет пройти n вёрст прямо, затем повернуть направо под прямым углом и идти до [latex]NN[/latex]. Выбрав правую, он должен будет преодолеть участок некоторой длины прямо, затем повернуть налево и пройти такой же по длине участок. При этом известно, что длины левой и правой дорог одинаковы. От нас требуется найти длину пути по одной из дорог и длину пути напрямик.

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

Длина пути от развилки до [latex]N[/latex].

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

Длины путей по дороге и напрямик.

Тесты

Входные данные Выходные данные
[latex]n[/latex] [latex]{ s }_{ 1 }[/latex] [latex]{ s }_{ 2 }[/latex]
1 0 0 0
2 8 11.0416 8.55871
3 0.5 0.690101 0.534919
4 21 28.9843 22.4666
5 13.45 18.5637 14.3893

Решение

Код можно увидеть и проверить его правильность тут: ideone

Пояснение

Обозначим развилку как [latex]A[/latex] как, село [latex]B[/latex], место пересечения правой дороги с рельсами как [latex]D[/latex], и проведём [latex]DH \bot AB[/latex] и [latex]DK \bot BC[/latex].

Пусть [latex]AD = 2x[/latex], тогда  [latex]AH = x[/latex]; Из треугольника [latex]AHD[/latex]: [latex]BK = DH = x\cdot\sqrt { 3 }[/latex];

[latex]KC=KB-BC=n+x \cdot \left(\sqrt{3}-4\right)[/latex].
Из треугольника [latex]CKD[/latex] по теореме Пифагора: [latex]{KC}^{2}+{KD}^{2}={CD}^{2}[/latex]. Подставив значения, раскрыв скобки и проведя математические преобразования, получим квадратное уравнение [latex]{x}^{2}\cdot (-4\sqrt{3}+8)-x \cdot n \cdot (\sqrt{3}-5)+{n}^{2}=0[/latex].
Найдём дискриминант [latex]D={n}^{2}\cdot(6\sqrt{3}-4)[/latex]. [latex]KD=n-x[/latex] и [latex]KD > 0[/latex], значит, [latex]n-x > 0[/latex] и [latex]x < n[/latex]. Для первого из корней полученного квадратного уравнения это условие не выполняется, соответственно, мы имеем лишь один корень. Найдя его, мы найдём половину длины [latex]AD[/latex]. Выведем формулу для его расчёта:[latex]x=\frac{n\cdot(5-\sqrt{3}-\sqrt {6\cdot\sqrt {3}-4 })}{8\cdot (2-\sqrt {3})}[/latex] Тогда длина пути по дороге будет равна [latex]4\cdot x[/latex], а длину пути напрямик мы найдём из треугольника [latex]ABC[/latex] по теореме Пифагора: [latex]{s}_{2}=\sqrt{2\cdot ({n}^{2}-4x\cdot n+8{n}^{2})}[/latex].

e-olymp 906. Произведение цифр

Задача взята с сайта e-olimp

Условие

Задано трицифровое число. Определить произведение его цифр.

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

В единственной строке заданное трицифровое число.

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

В единственной строке произведение цифр заданного числа.

Тесты

# Входные данные Результат
1 235 30
2 106 0
3 111 1

Описание решения

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

Для разбиения на цифры воспользуемся формулой:

В данной формуле в первом множителе мы получаем первую цифру, во втором — вторую, и в третьем соответственно третью.