А 136к

Задача:

Даны натуральное число $n$, действительные числа  [latex]a_{1}\ldots a_{n}[/latex].

Вычислить:  $ 2\left(a_{1}+\ldots+a_{n} \right)^2 $.

Тесты:

n введенные результат
3 1 2 3 72
4 0 0 0 0 0
4 -5 -7 -3 -1 512

Код:

Ход решения:

Заводим переменную [latex]result[/latex] и присваиваем ей значение 0 . Далее, в цикле от 0 до [latex]n[/latex] увеличиваем значение текущего значения [latex]result[/latex]. По окончании цикла возводим [latex]result[/latex] в квадрат и умножаем на 2.

e-olymp 1154. Кружок хорового пения

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

В некотором учебном заведении функционирует кружок хорового пения. Начало кружка всегда происходит единообразно: по сигналу руководителя кружка все [latex]N[/latex] участников становятся в круг и каждый [latex]M[/latex] -й для распевки поёт гамму.

Руководитель кружка заметил, что размять голосовые связки не всегда удаётся всем участникам кружка. По заданным [latex]M[/latex] и [latex]N[/latex] помогите ему определить, или в очередной раз в разминке примут участие все участники хора.

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

Входные данные состоят из нескольких тестовых случаев. Каждый тестовый случай расположен в отдельной строке и содержит два целых числа [latex]M[/latex] и [latex]N[/latex].

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

Для каждого тестового случая в отдельной строке выведите «Yes», если в разминке примут участие все участники хора, в противном случае выведите «No».

Тесты:

n m answer
 4   1  Yes
 6   3  No

Код:

Ход решения:

Для начала нам надо найти наибольший общий делитель (НОД). Для этого хорошо подойдет алгоритм Евклида и если НОД равен единице, то все ученики распоются и на выходе подаётся «Yes», иначе «No».

e-olymp 109. Numeration

Задача взята с сайта e-olymp.com.

Условие

Для нумерации $M$ страниц книги использовали $N$ цифр. По заданному $N$ вывести $M$ или $0$, если решения не существует. Нумерация начинается с первой страницы.

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

Единственное число $N$. В книге не более $1001$ страницы.

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

Искомое количество страниц.

Тесты :

$N$ $8$ $21$ $22$ $113$ $999$ $1001$
$M$ $8$ $15$ $0$ $61$ $369$ $0$

Код на Haxe:

Ход решения:

Принимаем исходное количество страниц $M$ как $0$ и увеличиваем его в начале каждой итерации цикла. Цикл будет идти, пока мы не исчерпаем заданное количество цифр $N$, вычитаем необходимое их количество в зависимости от $M$:

Далее проверяем условие корректности исходных данных: если мы получили отрицательное значение $N$, значит, исходное его значение также было неверным, тогда количеству страниц присваиваем $0$:

Выйдя из цикла, выводим $M$:

Примечание: Входные данные для тестирования были заданы программно из-за определенных затруднений в использовании стандартного ввода в онлайн-среде try.haxe.org.

Ссылки:

Рабочий код для тестирования на try.haxe.org: Try Haxe !

А119(а)

Задача

Вычислить бесконечную сумму с заданной точностью $ \varepsilon \left(\varepsilon > 0\right) $. Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем $ \varepsilon $.

$$\sum_{i = 1}^\infty \frac{1}{i ^ 2}$$

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

Точность $ \varepsilon $.

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

Бесконечная сумма с заданной точностью $ \varepsilon $.

Тесты

Входные данные Выходные данные
1 0.0000000000000045 1.6449339997656687
2 0.45 1
3 0.123123 1.25
4 1e-9 1.6449024437950241

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

Ссылка на tryhaxe

 

Решение

На каждом шаге текущее слагаемое равно $ \frac{1}{i^2} $. Пока оно не меньше заданной точности, прибавляем к ответу.
Если заданная точность отрицательна либо равна нулю, цикл станет бесконечным, потому что $ \frac{1}{i^2} > 0, \forall i > 0 $.

Реальная же сумма ряда равна $\frac{\pi^2}{6}$, что в десятичном приближении представляет собой число 1.64493406684822643647241516664602518921894990120679843773555…

e-olymp 111. Часы

Ссылка на условие задания: e-olymp.

Условие

Часы с боем пробивают каждый час такое количество ударов, сколько их есть на циферблате с цифрами от 1 до 12, и по одному разу тогда, когда минутная стрелка указывает на цифру 6. Зная начальное и конечное время в рамках одних календарных суток (выраженное в часах и минутах), подсчитать общее количество ударов на этом промежутке времени.

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

Начальное и конечное время одних календарных суток в часах ($H$) и минутах ($M$) через пробел ([latex]0 \leq H \leq 23, 0 \leq M \leq 59[/latex]).

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

Ответ на задачу.

Тесты

Входные данные Выходные данные
Начальное и конечное время Количество ударов
13 30 15 10 7
0 00 23 59 180
12 30 12 30 1
22 22 22 25 0

Код.

Решение.

Заведем переменную, которая будет отвечать за количество пробитых ударов res. Если на часах 59 минут, то увеличиваем количество часов h1, и обнуляем значение минутной стрелки m1, для следующего круга. Если значение минутной стрелки равно 30 то увеличиваем переменную res на один. Если же минутная стрелка на 12, то есть 0 минут, то к res добавляем остаток от деления текущего количества часов на 12. Увеличиваем значение переменной m1 на 1. Повторяем, пока начальное время не будет совпадать с конечным.
Ссылка на решение задачи на сайте Try Haxe!

Альтернативное решение.

Также существует способ решения этой задачи без использования циклов. Для этого я использовала функцию FactTree, которая реализует арифметическую прогрессию. Эта функция считает сколько ударов совершили часы от 0 часов, до указанного в качестве параметра времени. Объясним принцип работы функции ProdTree.Пусть нам нужно найти сумму последовательных чисел от L до R, обозначим его как P(L, R). Разделим интервал от L до R пополам и посчитаем P(L, R) как P(L, M) + P(M + 1, R), где M находится посередине между L и R, M = (L + R) / 2. Заметим, что слагаемые будут примерно одинаковой длины. Аналогично разобьем P(L, M) и P(M + 1, R). Будем производить эту операцию, пока в каждом интервале останется не более двух слагаемых. Очевидно, что P(L, R) = L, если L и R равны, и P(L, R) = L + R, если L и R отличаются на единицу.

Ссылка на решение задачи на сайте Try Haxe!