Loading [MathJax]/extensions/tex2jax.js

Действительные числа

Упражнения

Во всех задачах этого листка нельзя использовать строковые типы данных и операции с ними.

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

Для увеличения числа выводимых знаков действительных чисел, можно использовать метод precision, вызывается так: cout.precision(16).

Не забудьте, что действительные числа представляются неточно, поэтому сравнивать их нужно с использованием \(\varepsilon\) (числа \(a\) и \(b\) считаются равными, если \(|a-b|\lt\varepsilon\) для некоторого маленького \(\varepsilon\)).

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

A: Целая часть

Дано положительное действительное число X. Выведите его целую часть.
Ввод Вывод
17.9
17

B: Дробная часть

Дано положительное действительное число X. Выведите его дробную часть абсолютно точно. Исходное число содержит не более 6 знаков после десятичной точки.
Ввод Вывод
17.9
0.9

C: Первая цифра после точки

Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. При решении этой задачи нельзя пользоваться условной инструкцией и циклом.
Ввод Вывод
1.79
7

D: Цена товара

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

При решении этой задачи нельзя пользоваться условными инструкциями и циклами.
Ввод Вывод
10.35
10 35

E: Пизанская башня

Галилей сбрасывает (без начальной скорости) камень с Пизанской башни, высота которой равна \(h\) метров. Определите время падения камня в секундах. Значение \(g=9.8\) м/с2.

Программа получает на вход действительное число \(h\) и должна вывести значение времени.
Ввод Вывод
55.86
3.37639

F: Разгон автомобиля

Под разгоном автомобиля подразумевается время, за которое этот автомобиль с места разгоняется до скорости 100 км/ч. Например, шестая модель Жигулей разгоняется до 100 км/ч за 17.4 с, а Porshe–911 — за 5.1 с.

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

Программа получает на вход значение скорости, до которой осуществляется разгон \(v\) в км/ч, а потом — время разгона \(t\) в секундах.
Ввод Вывод
100.0
17.4
0.1629
100.0
5.1
0.555778

G: МКАД - 2

МКАД представляет собой окружность длиной \(L\). Рассмотрим систему координат, центр окружности находится в начале координат. Байкер Вася выезжает из точки пересечения МКАД с положительным направлением оси OX и едет против часовой стрелки. Определите координаты Васи после того, как он проехал расстояние \(K\).

Программа получает на вход два действительных числа \(L\) и \(K\) и должна вывести два числа — координаты Васи.
Ввод Вывод Примечание
6.283185307179586
2.356194490192345
-0.7071067811865475
0.7071067811865476

Дана окружность радиуса 1, движение начинается в точке (1, 0), Вася проезжает 3/8 окружности.

H: Колонна

Вы находитесь в начале координат. В точке с координатами \((x, y\)) находится центр круглой колонны радиусом \(r\). Определите, под каким углом вы видите колонну.

Программа получает на вход три действительных числа \(x\), \(y\) и \(r\) и должна вывести значение угла в градусах. Гарантируется, что начало координат не находится внутри колонны.
Ввод Вывод Примечание
2.0
1.0
1.0
53.13010235415598

Угол немного больше 45 градусов.

I: Длина верёвки

В условии предыдущей задачи вы хотите окружить колонну верёвкой, концы которой вы держите в руках. Определите минимальную длину верёвки.

Входные данные аналогичны предыдущей задаче, программа должна вывести минимальную длину верёвки.
Ввод Вывод
2.0
1.0
1.0
8.068887871591405

J: Правильный многоугольник

Правильный \(n\)-угольник вписан в окружность радиуса \(r\). Найдите его периметр и площадь.

Программа получает на вход целое число \(n\ge 3\) и действительное \(r \gt 0\).

Программа должна вывести периметр и площадь данного \(n\)-угольника.
Ввод Вывод
4
1.0
5.65685424949238
2.0

K: Углы треугольника

Даны три числа, являющиеся сторонами невырожденного треугольника. Определите углы этого треугольника (воспользуйтесь теоремой косинусов) и определите его тип.

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

Программа должна вывести одну из следующих строк: «acute» (остроугольный), «right» (прямоугольный), «obtuse» (тупоугольный). Затем нужно вывести углы треугольника в градусах в порядке неубывания.
Ввод Вывод
3
3
3
acute
60
60
60
0.3
0.4
0.5
right
36.8699
53.1301
90

L: Смеси

У вас имеется \(v_1\) литров раствора концентрации \(p_1\%\) и \(v_2\) литров раствора концентрации \(p_2\%\). Вам необходимо получить \(v\) литров раствора концентрации \(p\%\) используя только данные растворы.

Программа получает на вход числа \(v_1\), \(p_1\), \(v_2\), \(p_2\), \(v\), \(p\). Все числа — действительные, не превосходят 100.

Если получить нужный объём требуемого раствора возможно, выведите слово «YES», затем выведите два числа: необходимое количество литров первого раствора и второго раствора, которое нужно взять. Иначе выведите одно слово «NO».
Ввод Вывод
10.0
5.0
20.0
10.0
10.0
7.0
YES
6
4
10.0
5.0
20.0
10.0
20.0
7.0
NO

В этих примерах смешиваются 10 л раствора концентрации 5% и 20 л раствора концентрации 10%, нужно получить концентрацию 7%. В первом примере нужно получить 10 л и для этого нужно взять 6 л первого раствора и 4 л второго раствора. Во втором примере нужно получить 20 л смеси концентрации 7% и это сделать нельзя.

M: Спортивное ориентирование

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

Программа получает на вход число \(n\), затем записаны \(2n-1\) действительных чисел. Первое, третье, ...., последнее число в этом списке задают длины участков (это положительные числа), а второе, четвёртое, ... — значение угла поворота между участками в градусах. Поворот может быть нулевым (это означает, что движение продолжается в том же направлении), положительным или отрицательным.

Программа должна вывести одно действительное число — расстояние между начальной и конечной точками маршрута. Затем в следующей строке программа должна вывести слово «YES» если начало и конец маршрута совпадают, или слово «NO» в противном случае.
Ввод Вывод
3
10
45
14.142135623730951
-135
10
20
NO
3
179
120
179
120
179
0
YES

N: Таблица

Бесконечную таблицу, строки и столбцы которой пронумерованы целыми числами начиная с 1 сверху вниз и слева направо, заполняют целыми числами 1, 2, 3 и т.д. Числа выписываются в соседние клетки по границам квадратов увеличивающегося размера (см. рисунок).

Дано число \(n\le 10^{18}\), определите номер строки и номер столбца, в котором окажется это число.

Программа должна вывести два целых числа: номер строки и номер столбца, в которых находится число \(n\) в этой таблице.

При выполнении этой задачи попробуйте использовать тип данных long double, если будут возникать проблемы. Проверяйте работу своей программы на максимальных тестах.
Ввод Вывод
15
4 2