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!

e-olymp 388. Превращение

Условие

Возьмем какое-нибудь натуральное число [latex]n[/latex]. Будем изменять его следующим образом: если число четное, то разделим его на [latex]2[/latex], если нечетное, прибавим [latex]1[/latex]. После нескольких таких изменений мы всегда получаем число [latex]1[/latex]. Например, из числа [latex]11[/latex] получается число [latex]12[/latex], затем [latex]6[/latex], [latex]3[/latex], [latex]4[/latex], [latex]2[/latex] и, наконец, [latex]1[/latex]. Таким образом, для получения [latex]1[/latex] из [latex]11[/latex] нужно проделать [latex]6[/latex] изменений.
Напишите программу, которая считывает натуральное число и выводит количество изменений данного числа до получения [latex]1[/latex].

Код

Решение

  • Цикл начинается со значением счетчика 0, так как возможны случаи, когда операций над [latex]n[/latex] вообще не нужно будет производить (конкретно — при [latex]n=1[/latex]).
  • Поскольку нам гарантируют, что входное число [latex]n[/latex] — натуральное, то цикл будет работать до тех пор, пока [latex]n>1[/latex]
  • После каждой итерации значение счетчика будет увеличено на [latex]1[/latex].
  • В теле цикла мы проверяем чётность числа [latex]n[/latex] путём проверки остатка от деления [latex]n[/latex] на [latex]2[/latex]. Если остаток равен 0, то число чётное, в противном случае — нечётное. По результату проверки [latex]n[/latex] может быть преобразовано двумя способами:
    • если [latex]n[/latex] — нечетное, то значение [latex]n[/latex] увеличивается на [latex]1[/latex];
    • в противном случае [latex]n[/latex] делится на [latex]2[/latex].

Реализуем описанный алгоритм, после которого отправляем на печать значение счетчика

Ссылка на решение задачи

Ссылка на условие задачи

A334(а). Вложенная сумма

Ссылка на оригинальную статью.

Задача

Вычислить:[latex]\sum \limits_{i=1}^{m}\sum \limits_{j=1}^{n}\frac{1}{i+j^2}[/latex] где [latex]m,n[/latex] — вводимые нами числа.

Тесты

Вход([latex]m,n[/latex]) Выход([latex]S[/latex])
40 20 13.6458
100 50 24.6458
200 25 31.7764
1000 282 89.8078

Код

Решение

Вводим два оператор цикла for, один вложенный в другой.
Задаем наше выражение, а затем суммируем его,
согласно циклу.

e-olymp 141. Минимальная сумма цифр

Задача. Сколько натуральных чисел из промежутка [M,N] имеют наименьшую сумму цифр ?

Задачу также можно найти здесь.

Входные данные:
Во входном файле два числа [latex]\textrm{M}[/latex] и [latex]\textrm{N}[/latex] ([latex]1\leq \textrm{M}\leq \textrm{N}\leq 1000000[/latex]) .

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

В выходной файл нужно записать ответ — одно число.

Тесты

M N Вывод
1 1 100 3
2 2 17 1
3 32 1024 2
4 1 1000000 7
5 10 10 1

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

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

Для решения данной задачи зададим функцию, которая возвращает сумму чисел вводимого нами числа. После ввода границ необходимого промежутка присваиваем минимальную сумму[latex]\textrm{M}[/latex]. Теперь задаём цикл со счётчиком i от [latex]\textrm{M + 1}[/latex] до [latex]\leq \textrm{N}[/latex]. В случае, когда сумма чисел счётчика меньше сумме цифр числа [latex]\textrm{M}[/latex], присваиваем ей (сумме цифр счётчика i) минимальную сумму цифр и выводим единицу. В противном случае увеличиваем счётчик на единицу и выводим полученный результат. Выводимое число и будет количеством натуральных чисел на промежутке, имеющих наименьшую сумму цифр.

Код программы можно найти здесь.

e-olymp 904. Увеличить на 2

Ссылка на оригинальную статью.

Задача

Задан одномерный массив [latex]A[/latex] целых чисел. Увеличить на [latex]2[/latex] каждый неотрицательный элемент массива.

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

В первой строке задано натуральное число [latex]h[/latex] — количество элементов массива [latex]h \le 100.[/latex] Во второй строке через пробел заданы сами элементы массива, значение каждого из которых по модулю не превышает [latex]100.[/latex]

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

В единственной строке вывести через пробел [latex]h[/latex] чисел: новые значения элементов массива, в том же порядке, в котором они были заданы.

Код

Тесты

Входные данные Выходные данные
4
1 2 3 4
3 4 5 6
4
1 2 3 -4
3 4 5 -4
4
-1 2 3 4
-1 4 5 6
4
0 2 3 4
2 4 5 6
4
1 2 2 4
3 4 4 6

Решение

Вводим число [latex]b[/latex]. Используем цикл for и вводим число [latex]b[/latex]. Выводим неотрицательные элементы массива [latex]A[/latex], либо без изменений, либо увеличенное на два.

 

e-olymp 1210. Очень просто!!!

Условие
По заданным числам $n$ и $a$ вычислить значение суммы: $\sum \limits_{i=1}^{n} i⋅ a^{i}$

Входные данные
Два натуральных числа $n$ и $a$.

Выходные данные
Значение суммы.

Тесты

Входные данные Выходные данные
3 3 102
4 4 1252

Решение
Вводим числа $n$ и $a$. Далее заходим в цикл от $1$ до $n$ включительно, так как $n$-й элемент нам тоже нужно суммировать. В каждой итерации цикла возводим число $a$ в $i$-ю степень, умножаем на $i$ и все это прибавляем к переменной $sum$. После завершения цикла выводим переменную $sum$.

Try Haxe !