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: Квадратное уравнение

Даны произвольные действительные коэффициенты \(a\), \(b\), \(c\). Решите уравнение \(ax^2+bx+c=0\).

Если данное уравнение не имеет корней, выведите число 0. Если уравнение имеет один корень, выведите число 1, а затем этот корень. Если уравнение имеет два корня, выведите число 2, а затем два корня в порядке возрастания. Если уравнение имеет бесконечно много корней, выведите число 3.

Не забывайте про точность представления действительных чисел и правила их сравнения.
Ввод Вывод
1
-1
-2
2 -1.0 2.0
-1
2
-1
1 1.0

L: Схема Горнера

Дан многочлен \(P(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0\) и число \(x\). Вычислите значение этого многочлена, воспользовавшись схемой Горнера: \[ P(x)= \left( ... \left( \left( \left( a_n x + a_{n-1} \right) x + a_{n-2} \right) x + a_{n-3} \right) ... \right) x + a_{0} \]

Сначала программе подается на вход целое неотрицательное число \(n\le20\), затем действительное число \(x\), затем следует \(n+1\) вещественное число — коэффициенты многочлена от старшего к младшему. Программа должна вывести значение многочлена.

При решении этой задачи нелья использовать массивы и операцию возведения в степень. Программа должна иметь сложность \(O(n)\).
Ввод Вывод
1
0
1
1
1.0
2
0.5
1
1
1
1.75

M: Система линейных уравнений - 1

Даны числа \(a\), \(b\), \(c\), \(d\), \(e\), \(f\). Известно, что система линейных уравнений \[ \cases{ax + by = e, \cr cx + dy = f.} \]

имеет ровно одно решение. Выведите два числа \(x\) и \(y\), являющиеся решением этой системы.
Ввод Вывод
1
0
0
1
3
3
3.0 3.0

N: Баллистическая задача - 1

Самолет летит на высоте \(h\) метров со скоростью \(v\) м/c. Ему необходимо поразить бомбой цель. На каком расстоянии \(x\) от цели (в метрах) необходимо выпустить бомбу?

Программа получает на вход вещественные числа \(h\) и \(v\) и должна вывести значение \(x\).

В этой и последующей задачах ускорение свободного падения \(g=9.8\), сопротивлением воздуха пренебречь.
Ввод Вывод
1000
300
4285.714285714285

O: Баллистическая задача - 2

Пушка стреляет снарядом со скоростью \(v\) м/c под углом \(\alpha\) к горизонту (в радианах). На каком расстоянии \(x\) (в метрах) от пушки упадет снаряд?

Программа получает на вход числа \(v\) и \(\alpha\) и должна вывести значение \(x\).
Ввод Вывод
500
0.2
9934.141385424757

P: Баллистическая задача - 3

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

Программа получает на вход числа \(v\) и \(x\) и должна вывести все возможные значения \(\alpha\) в порядке возрастания. Если поразить цель невозможно, программа должна вывести одно число 0.
Ввод Вывод
500
10000
0.2014022918218565
1.36939403497304
100
10000
0

Q: Баллистическая задача - 4

Пушка стреляет снарядом со скоростью \(v\) м/c и должна поразить цель, находящуюся на расстоянии \(x\) метров по горизонтали и на высоте \(y\) метров. Под каким углом \(\alpha\) к горизонту (в радианах) необходимо произвести выстрел?

Программа получает на вход числа \(v\), \(x\), \(y\) и должна вывести все возможные значения \(\alpha\) в порядке возрастания. Если поразить цель невозможно, программа должна вывести одно число 0.
Ввод Вывод
500
10000
100
0.2118388917004956
1.3689571017810664
400
10000
8000
0

R: Таблица

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

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

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

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

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

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

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

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

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

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

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

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

U: Смеси

У вас имеется \(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% и это сделать нельзя.

V: Система линейных уравнений - 2

Даны действительные числа \(a\), \(b\), \(c\), \(d\), \(e\), \(f\). Решите систему линейных уравнений \[ \cases{ax + by = e, \cr cx + dy = f.} \]

Вывод программы зависит от вида решения этой системы.

Если система не имеет решений, то программа должна вывести единственное число 0.

Если система имеет бесконечно много решений, каждое из которых имеет вид \(y=kx+b\), то программа должна вывести число 1, а затем значения \(k\) и \(b\).

Если система имеет единственное решение \((x_0,y_0)\), то программа должна вывести число 2, а затем значения \(x_0\) и \(y_0\).

Если система имеет бесконечно много решений вида \(x=x_0\), \(y\) — любое, то программа должна вывести число 3, а затем значение \(x_0\).

Если система имеет бесконечно много решений вида \(y=y_0\), \(x\) — любое, то программа должна вывести число 4, а затем значение \(y_0\).

Если любая пара чисел \((x,y)\) является решением, то программа должна вывести число 5.

В этой задаче не будет тестов, связанных с точностью представления действительных чисел.
Ввод Вывод
1
0
0
1
3
3
2 3.0 3.0
1
1
2
2
1
2
1 -1.0 1.0
0
2
0
4
1
2
4 0.5