ML11

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

Определить время падения камня на поверхность земли с высоты h.

Алгоритм решения

Для начала оговорим трактовку условия задачи.

1. Поскольку в условии ничего не говорится про начальную скорость камня, будем считать ее равной нулю.
2. Аналогично в условии ничего не говорится про точность результата. От этого зависит как округление до определенного количества знаков после запятой в выводе, так и то, с какой точностью следует указать ускорение свободного падения, поскольку каноны физики требуют, чтобы ответ на физическую задачу указывался с точностью наимение точно указанного в условии данного. В данном решении я взял значение g свойственное Одессе с точностью 4 значка после запятой. Соответственно, ответ будет выводиться с такой же точностью.
3. Предполагается что высота и время должны указываться в СИ

Тогда наша рабочая формула выглядит следующим образом: 2hg, где g=9.8075ms2 Вводить в программе g, как отдельную переменную или константу нет смысла, т.к. она используется только раз. Поэтому в коде вместо g стоит просто ее значение.

Тесты

Высота (м) Время (сек)
1 0 0
2 5 1.0098
3 20 2.0195
4 80 4.0391

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

Код на ideone.com.

Задача оригинал на языке С++(другого автора) на java.mazurok.com.

e-olymp112.Торт

В честь дня рождения наследника Тутти королевский повар приготовил огромный праздничный торт, который был подан на стол Трем Толстякам. Первый толстяк сам мог бы целиком его съесть за t1 часов, второй — за t2 часов, а третий — за t3 часов.

Сколько времени потребуется толстякам, чтобы съесть весь праздничный торт вместе?

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

Единственная строка содержит три целых неотрицетельных числа t1, t2 и t3, каждое из которых не превосходит 1000.

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

Вывести время в часах, за которое толстяки вместе могут съесть торт. Результат округлить до двух десятичных знаков.

Тесты

t1 t2 t3 t
3 3 3 1.00
4 67 50 3.51
228.22 8 2.28 1.76
1577 157.7 15.77 14.21

С ветвлением

 

Без ветвления

Решение с ветвлением

Первый толстяк ест со скоростью один торт за t1 часов. Аналогично и с остальными толстяками. Тогда из торта следует вычесть те части, которые съест каждый, чтобы торта не осталось. Получается уравнение
1tt1tt2tt3=0;
tt1+tt2+tt3=1;
tt2t3+tt1t3+tt1t2t1t2t3=1;
t(t1t2+t2t3+t1t3)=t1t2t3;
t=t1t2t3t1t2+t2t3+t1t3;
Рассматриваем случай, при котором одна из переменных равна нулю, тогда выводим ноль. В противном случае выводим значение t с округлением до сотых.

Решение без ветвления

Так как по условию задачи первый толстяк съедает весь торт за t1 часа, второй — за t2 часа и третий — за t3 часа, то их скорость поедания торта составит 1t1, 1t2 и 1t3 торта в час соответсвенно. Если толстяки будут есть торт одновременно, то в час они будут съедать (1t1+1t2+1t3) часть торта. Тогда весь торт будет съеден за 11t1+1t2+1t3 часов.
Затем нужно вывести результат, округлённый до двух десятичных знаков.

Ссылки

Ссылка на E-olymp
Ссылка на решение

e-olymp 51. К-домино

Задача

ДоминоРаботник отдела технического контроля любил выбраковывать «доминошки», которые содержали одинаковые значения. Так как на предприятии, выпускающем K-домино, этого не знали, к нему постоянно поступали претензии на сумму, равную стоимости K-домино. Стоимость K-домино составляла ровно столько гривен, сколько было в купленном покупателем наборе доминошек.Для того, чтобы его не уволили с работы, работник ОТК выбраковывал иногда не только все не любимые «доминошки», а несколько больше, но не более половины гарантированно выбраковыванных.Зная сумму претензии, пришедшей на предприятие, установите, какой из наборов K-домино был куплен покупателем.

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

Единственное число S – сумма претензии, пришедшей на предприятие, S2000000000.

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

Единственное число – индекс K купленного покупателем K-домино.

Входные данные Выходные данные
1 5 3
2 10 4
3 1000000 1414
4 555666777888 1054198
5 13 5

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

Решение

K-домино — набор домино с минимальным количеством точек на одной из половин доминошки.
Количество дублей, то есть количество точно выбракованных доминошек — k+1. Общее количество доминошек k-домино:(k+1)k+22
Пусть работник дополнительно выбраковывал e доминошек. s — сумма претензии, тогда имеем:

k+1+e+s=(k+1)k+22  
k2<=2s+1  
k=[2s+1]

Ссылки

Ссылка на e-olymp.
Ссылка на Ideone

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

Задача

Broken Clocks

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

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

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

В первой строке задаются три целых числа h1, m1, s1, определяющие время поломки часов. Во второй строке записаны три числа h2, m2, s2, которые определяют показания часов в текущий момент времени ( 0h1,h2<24, 0m1,m2,s1,s2<60 ).

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

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

Тесты

Входные данные Выходные данные
1200
1210
12024
135959
125959
135958
151216
151216
151216
000
235959
235959
16017
16018
162417
11053
000
134842
11318
225132
7451

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

Решение

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

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

Ссылки

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

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) в которой будет трехзначное число, которое мы вводим с клавиатуры. Затем проверяем: отрицательное или положительное это число. Для того чтобы получить первую цифру этого числа воспользуемся простой формулой latexa/100 , вторую цифру по формуле — (a / 10) % 10, и третью a % 10.

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

ML7

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

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

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

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

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

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

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

Тесты

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

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

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

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

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

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

Тесты

Входные данные Выходные данные
n s1 s2
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

Пояснение

Обозначим развилку как A как, село B, место пересечения правой дороги с рельсами как D, и проведём DHAB и DKBC.

Пусть AD=2x, тогда  AH=x; Из треугольника AHDBK=DH=x3;

KC=KBBC=n+x(34).
Из треугольника CKD по теореме Пифагора: KC2+KD2=CD2. Подставив значения, раскрыв скобки и проведя математические преобразования, получим квадратное уравнение x2(43+8)xn(35)+n2=0.
Найдём дискриминант D=n2(634)KD=nx и KD>0, значит, nx>0 и x<n. Для первого из корней полученного квадратного уравнения это условие не выполняется, соответственно, мы имеем лишь один корень. Найдя его, мы найдём половину длины AD. Выведем формулу для его расчёта:x=n(53634)8(23) Тогда длина пути по дороге будет равна 4x, а длину пути напрямик мы найдём из треугольника ABC по теореме Пифагора: s2=2(n24xn+8n2).

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

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

Условие

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

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

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

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

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

Тесты

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

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

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

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

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

ML13. Площадь равностороннего треугольника

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

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

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

Сторона равностороннего треугольника a

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

Площадь равностороннего треугольника S

Тесты

Входные данные Выходные данные
1 4 6.928
2 3 3.897
3 6 15.588

Ссылка на результат теста на wolframalpha.com

Решение

Для проверки работы программы можно воспользоваться онлайн компилятором Ideone.com

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

Для нахождения площади равностороннего треугольника будем использовать формулу S=a234. Чтобы найти корень, используем функцию Math.sqrt(). На экран выводим площадь треугольника.