Вычисление по заданной формуле

31 задача
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

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

\[\frac{\Delta F}{F} = \left(\frac{R_p}{R_\star}\right)^{2} \qquad\Longrightarrow\qquad R_p = R_\star\sqrt{\frac{\Delta F}{F}}\]

Радиус звезды \(R_\star\) задан в радиусах Солнца, где \(R_\odot = 6{,}957 \cdot 10^{8}\) м. Вычислить радиус планеты в радиусах Юпитера, где \(R_{\mathrm{J}} = 7{,}1492 \cdot 10^{7}\) м.

Проверьте порядок величины: для глубины около одного процента и звезды солнечного радиуса должна получиться планета размером примерно с Юпитер.

Ввод. Два вещественных числа, каждое на своей строке: \(R_\star\) в радиусах Солнца и глубина транзита \(\Delta F/F\), где \(0 \lt R_\star \le 1000\) и \(0 \lt \Delta F/F \le 1\).

Вывод. Радиус планеты в радиусах Юпитера с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Видимая звёздная величина \(m\) и абсолютная звёздная величина \(M\) связаны с расстоянием до звезды соотношением

\[m - M = 5\lg d - 5\]

где \(d\) выражено в парсеках. Отсюда

\[d = 10^{\,(m - M + 5)/5}\]

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

Здесь возведение в степень с дробным показателем: в Python это оператор **. Проверьте себя определением абсолютной звёздной величины: если \(m = M\), расстояние равно ровно 10 парсекам.

Ввод. Два вещественных числа, каждое на своей строке: \(m\) и \(M\), где \(-30 \le m \le 30\) и \(-30 \le M \le 30\).

Вывод. Расстояние в парсеках с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Тело обращается вокруг центрального тела массой \(M\) по орбите с большой полуосью \(a\). Период обращения

\[T = 2\pi\sqrt{\frac{a^{3}}{GM}}\]

где \(G = 6{,}67430 \cdot 10^{-11}\) м³·кг⁻¹·с⁻².

Вычислить период обращения в сутках (1 сутки = 86400 с).

Формула вложенная: куб, отношение, корень, умножение. Считайте по шагам, с промежуточными переменными, — так ошибка в скобках становится видимой. Обратите внимание, что \(GM\) — единый знаменатель.

Проверьте себя: для орбиты Земли, где \(a = 1{,}496 \cdot 10^{11}\) м и \(M = 1{,}989 \cdot 10^{30}\) кг, должно получиться около 365 суток.

Ввод. Два вещественных числа, каждое на своей строке: \(a\) в метрах и \(M\) в килограммах.

Вывод. Период обращения в сутках с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Тело брошено с поверхности земли со скоростью \(v\) под углом \(\alpha\) к горизонту. Сопротивление воздуха не учитывается. Дальность полёта

\[L = \frac{v^{2}\,\sin 2\alpha}{g}\]

Вычислить дальность.

Угол задан в градусах, а тригонометрические функции принимают радианы: переведите угол функцией math.radians. Учтите, что \(\sin 2\alpha \ne 2\sin\alpha\).

Проверьте себя предельными случаями: при \(\alpha = 0\) и при \(\alpha = 90^\circ\) дальность обращается в ноль, а максимум достигается при \(\alpha = 45^\circ\).

Ввод. Три вещественных числа, каждое на своей строке: \(v\) в м/с, \(\alpha\) в градусах и \(g\) в м/с², где \(0 \le v \le 10^4\), \(0 \le \alpha \le 90\), \(0 \lt g \le 100\).

Вывод. Дальность полёта в метрах с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Три резистора соединены параллельно. Их общее сопротивление находится из

\[\frac{1}{R} = \frac{1}{R_1} + \frac{1}{R_2} + \frac{1}{R_3}\]

Вычислить \(R\).

Это классическая ловушка приоритета операций: запись 1 / 1/R1 + 1/R2 + 1/R3 вычисляется совсем не так, как читается. Проверьте результат физически: общее сопротивление параллельного соединения всегда меньше наименьшего из трёх.

Ввод. Три вещественных числа, каждое на своей строке: \(R_1\), \(R_2\), \(R_3\) в омах, где \(0 \lt R_i \le 10^6\).

Вывод. Общее сопротивление в омах с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Период малых колебаний математического маятника длиной \(L\) при ускорении свободного падения \(g\) равен

\[T = 2\pi\sqrt{\frac{L}{g}}\]

Вычислить период.

Формула короткая, но в ней легко ошибиться скобками: выражения 2*pi*sqrt(L/g) и 2*pi*sqrt(L)/g отличаются только положением одной скобки, при этом обе программы запускаются без ошибок и выдают число. Проверьте себя предельным случаем: при \(L = g\) период должен равняться \(2\pi \approx 6{,}283185\).

Ввод. Два вещественных числа, каждое на своей строке: \(L\) в метрах и \(g\) в м/с², где \(0 \lt L \le 10^6\), \(0 \lt g \le 100\).

Вывод. Период в секундах с шестью знаками после запятой.

Формат вывода. Ответ выводится ровно с шестью знаками после запятой, например print(f"{x:.6f}"). Функция round для вывода не годится: она отбрасывает незначащие нули, и 2.00709 не совпадёт с 2.007090.

Палитра изображения содержит \(N\) различных оттенков. Определить наименьшее целое число бит, которого достаточно для кодирования номера оттенка, то есть наименьшее \(i\), при котором

\[2^i \ge N\]

Напрашивается решение math.ceil(math.log2(N)). Оно работает не всегда: логарифм вычисляется приближённо, и на больших \(N\) результат может отличаться от истинного на единицу. Проверьте своё решение на \(N = 2^{50}\) и \(N = 2^{50} + 1\).

Точный ответ даёт (N - 1).bit_length(): метод возвращает число значащих двоичных разрядов, а у числа \(N - 1\) их ровно столько, сколько бит нужно для \(N\) значений.

Ввод. Одно целое число \(N\), где \(1 \le N \le 10^{18}\).

Вывод. Одно целое число — количество бит.

Производится звукозапись с частотой дискретизации f Гц и глубиной кодирования b бит на отсчёт. Запись ведётся по c каналам. Определить, сколько целых секунд записи поместится в память объёмом V байт.

Здесь спрашивают, сколько поместится, — значит, округление вниз, обычное // без поправки. Обратите внимание на формулировку: вопрос «сколько поместится» и вопрос «сколько нужно, чтобы вместить» требуют округления в разные стороны.

Чтобы не терять точность, переведите объём памяти в биты, а не размер отсчёта в байты.

Ввод. Четыре целых числа, каждое на своей строке: \(f\), \(b\), \(c\) и \(V\), где \(1 \le f \le 10^6\), \(1 \le b \le 64\), \(1 \le c \le 8\), \(1 \le V \le 10^{15}\).

Вывод. Одно целое число — количество целых секунд.

При регистрации в информационной системе каждому пользователю выдаётся имя длиной ровно N символов. Имя составляется из алфавита мощностью M символов. Для хранения имени отводится одинаковое для всех пользователей целое число байт, при этом используется посимвольное кодирование, а на каждый символ отводится одинаковое целое число бит. Дополнительно на каждого пользователя хранится K байт служебных сведений.

Определить объём памяти, необходимый для хранения сведений о P пользователях.

Округлять вверх придётся дважды и на разных уровнях: сначала — число бит на один символ, затем — число байт на одно имя. Типичная ошибка состоит в том, чтобы округлить итоговый объём вместо объёма одной записи; проверьте себя на примере.

Число бит на символ — наименьшее \(i\), при котором \(2^i \ge M\). Его можно получить без цикла: (M - 1).bit_length().

Ввод. Четыре целых числа, каждое на своей строке: \(N\), \(M\), \(K\) и \(P\), где \(1 \le N \le 1000\), \(1 \le M \le 10^6\), \(0 \le K \le 1000\), \(1 \le P \le 10^6\).

Вывод. Одно целое число — объём памяти в байтах.

Числовая ось разбита на ячейки шагом \(h\), начиная от нуля: ячейка с номером \(k\) занимает промежуток \(\bigl[\,k h,\ (k+1)h\,\bigr)\). Для координаты \(x\) определить номер ячейки, в которую она попадает, — двумя способами: как x // h и как int(x / h).

Координата может быть отрицательной. Найдите такие x, при которых два способа дают разные ответы, и объясните, какой из них верен.

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

Ввод. Два целых числа, каждое на своей строке: \(x\) и \(h\), где \(-10^6 \le x \le 10^6\), \(1 \le h \le 10^6\).

Вывод. Два целых числа через пробел: результат x // h и результат int(x / h).

На струне длиной L миллиметров возбуждена волна длиной λ миллиметров. Определить наибольшее число целых полуволн, укладывающихся на струне.

Полуволна равна \(\lambda/2\), поэтому число полуволн равно

\[\frac{L}{\lambda/2} = \frac{2L}{\lambda}\]

Второе выражение целочисленное, первое нет. Запись L // (lam / 2) уводит в вещественное деление, и на больших \(L\) результат отличается от верного на единицу — один из тестов это проверяет. Оставайтесь в целых числах: 2 * L // lam.

Ввод. Два целых числа, каждое на своей строке: \(L\) и \(\lambda\), где \(1 \le L \le 10^{16}\), \(1 \le \lambda \le 10^9\).

Вывод. Одно целое число — количество целых полуволн.

Аккумулятор ёмкостью Q мА·ч питает прибор, потребляющий постоянный ток I мА.

Ответить на два вопроса:

1. Сколько целых часов проработает прибор от одного полностью заряженного аккумулятора? 2. Сколько аккумуляторов потребуется, чтобы прибор проработал непрерывно T часов?

Оба ответа получаются делением, но округляются в разные стороны. Прежде чем писать код, сформулируйте для каждого вопроса, чего именно спрашивают: сколько поместится или сколько нужно, чтобы вместить.

Ввод. Три целых числа, каждое на своей строке: \(Q\), \(I\) и \(T\), где \(1 \le Q \le 10^9\), \(1 \le I \le 10^9\), \(1 \le T \le 10^9\).

Вывод. В первой строке — число целых часов работы одного аккумулятора. Во второй — число аккумуляторов на T часов работы.

Маятник совершает одно полное колебание за T миллисекунд. Наблюдение длилось t миллисекунд, причём в начальный момент маятник только начинал колебание.

Определить, сколько полных колебаний уместилось в наблюдение и сколько миллисекунд прошло после последнего полного колебания.

Обратите внимание: обе части ответа получаются из одного деления. Частное и остаток здесь — не два разных вычисления, а две части одного вопроса, поэтому уместна функция divmod.

Ввод. В первой строке — целое \(T\), где \(1 \le T \le 10^6\). Во второй — целое \(t\), где \(0 \le t \le 10^{12}\).

Вывод. Два целых числа через пробел: число полных колебаний и остаток времени в миллисекундах.

Информация занимает N бит. Определить наименьшее целое число байт, в которое её можно поместить.

Функцию ceil использовать нельзя — решение с ней не будет принято. Приём округления вверх нужно вывести самостоятельно: если требуется вместить a единиц по b штук в каждой, понадобится (a + b - 1) // b штук. Проверьте на N = 8 и N = 9, что формула работает на границе.

Округление вверх записывается как \(\lceil a/b \rceil\), а в целых числах — как (a + b - 1) // b.

Решение через math.ceil(N / 8) кажется равноценным, но им пользоваться нельзя не только из-за запрета: при \(N \gt 2^{53}\) само число уже не представимо в вещественном типе точно, и ответ может отличаться на единицу. Один из тестов это проверяет.

Ввод. Одно целое число \(N\), где \(0 \le N \le 10^{19}\).

Вывод. Одно целое число — количество байт.

Дано трёхзначное натуральное число. Требуется вывести его разряды по отдельности, а затем сумму разрядов.

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

Ввод. Одно целое число \(n\), где \(100 \le n \le 999\).

Вывод. В первой строке — три числа через пробел: цифра сотен, цифра десятков, цифра единиц. Во второй строке — сумма разрядов.

Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.

Вычислите среднее арифметическое. Выведите три строки:

  1. Исходный список — числа через пробел.
  2. Среднее арифметическое, округлённое до 1 знака после запятой.
  3. Числа, которые строго больше среднего, через пробел (в порядке ввода). Если таких нет — пустая строка.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 20\)).

Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).

Формат выходных данных

Первая строка — исходный список через пробел.

Вторая строка — среднее с одним знаком после запятой.

Третья строка — числа больше среднего через пробел.

Пользователь вводит количество чисел, а затем сами числа — каждое на отдельной строке. Сохраните все числа в список.

Выведите две строки:

  1. Исходный список — числа через пробел.
  2. Среднее арифметическое, округлённое до 1 знака после запятой.

Формат входных данных

Первая строка — целое число \(N\) (\(1 \le N \le 20\)).

Следующие \(N\) строк — по одному целому числу (от \(-1000\) до \(1000\)).

Формат выходных данных

Первая строка — исходный список через пробел.

Вторая строка — среднее арифметическое с одним знаком после запятой.

Примечание

Подсказка: среднее = сумма / количество. Для вывода используйте round(x, 1).

Задана функция положения тела \(s(t)\) в виде полинома степени не выше 3. Дано также целое число \(t_0\). Выполните три вычисления:

  1. Скорость \(v(t)=s''(t)\) — первая производная, в упрощённом виде.

  2. Ускорение \(a(t)=s''''(t)\) — вторая производная, в упрощённом виде.

  3. Значение скорости в момент \(t_0\): число \(v(t_0)\).

Формат ввода

Строка 1: выражение полинома в синтаксисе Python (** для возведения в степень, * для умножения, переменная t). Строка 2: целое число \(t_0\) (\(-100\le t_0\le 100\)).

Формат вывода

Ровно 3 строки:

velocity: <выражение>
acceleration: <выражение>
v(<t0>): <число>

Пример ввода:

3*t**2 + 2*t - 5
2

Пример вывода:

velocity: 6*t + 2
acceleration: 6
v(2): 14

Разбор. \(s(t)=3t^2+2t-5\). Скорость: \(v(t)=s''(t)=6t+2\). Ускорение: \(a(t)=v''(t)=6\). Значение: \(v(2)=6\cdot2+2=14\).

Подсказки. Для разбора строки: parse_expr(s, ...). Производная: simplify(diff(expr, t)). Подстановка: expr.subs(t, t0).

На экзамене фиксируется время выполнения каждого задания учеником в часах и минутах. Определите среднее время выполнения задания.

Формат входных данных

В первой строке подаётся количество заданий N. В каждой из следующих N строк — два целых числа: часы и минуты, затраченные на одно задание (0 ≤ часы ≤ 3, 0 ≤ минуты ≤ 59).

Формат выходных данных

Два числа через пробел — среднее время в часах и минутах (минуты округлить до целого вниз).

Поделиться
Класснуть