e-olymp 6277. Покупка воды

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

Задача
Стоимость бутылки воды, учитывая стоимость пустой бутылки, составляет $1$ грн $20$ коп., а стоимость пустой бутылки $20$ коп.
Сколько бутылок воды можно выпить на $n$ грн, учитывая, что пустые бутылки можно сдавать, и на полученные деньги приобретать новые бутылки воды.

Входные данные
Натуральное число $n$ $(1≤n≤1000)$.

Выходные данные
Количество бутылок воды, которое можно выпить на $n$ грн.

Примечание: Вода без бутылки не продаётся.

Тесты

Входные данные Выходные данные
1 0,7 0
2 2 1
3 10 9
4 999 998

Код

Решение
Вводим переменную $n$ равную числу заданных денег. Так как при покупки и возвращении бутылки тратится $1$ грн, количество купленной воды будет на одну меньше, чем количества купюр. Чтобы «избавиться» от монет (десятичной части числа) при получении количества бутылок воды, округляем конвертируем переменную в целочисленный тип с округлением в сторону $0$.

Альтернативный вариант

Решение
Вводим переменную $n$ равную числу заданных денег и счетчик купленной воды. В цикле отнимаем от переменной $1$, так как при возвращении бутылки тратится лишь $1$ грн, а счетчик купленной воды увеличиваем на $1$.

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!

5.14. Оператор цикла while

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

Обычный цикл [latex]while[/latex] начинается с ключевого слова [latex]while[/latex], за которым следует открывающая скобка круглая « (», выражение условия и закрывающая скобка « )». После этого следует выражение тела цикла.

Выражение условия должно быть типа [latex]Bool[/latex].

На каждой итерации оценивается выражение условия. Если оно принимает значение [latex]false[/latex], цикл останавливается, в противном случае он вычисляет выражение тела цикла.

Этот вид цикла [latex]while[/latex] не оценивает выражение тела цикла: если условие не выполняется с самого начала, то тело цикла не вычисляется (не выполняется). Этим этот вид отличается от циклов [latex]do-while[/latex].