e-olymp 128. Счастливые билеты

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

Задача

Подсчитайте количество счастливых билетов, у которых сума первых трёх цифр равна [latex]N[/latex].

Счастливым билетом называется билет с шестизначным номером, у которого сумма первых трёх цифр равна сумме трёх последних.

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

В единственной строке задано натуральное число [latex] N (N ≤ 27). [/latex]

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

Единственное число — количество счастливых билетов.

Тесты

Входные данные (число [latex] N [/latex]) Выходные данные (число билетов)
1. 1 9
2. 27 1
3. 0 1
4. 10 3969
5. 3 100

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

Решение
Любой шестизначный номер можно представить как 2 трехзначных номера.

Для решения задачи рассмотрим все варианты трехзначных номеров. Две первые цифры такого номера могут быть любыми. Переберем все их комбинации с помощью двух  циклов. А для определения третьей цифры будем использовать специальное условие. Она должна быть результатом вычитания двух первых цифр из [latex]N[/latex], и быть именно цифрой, то есть меньше 10.

Когда в цикле встречается подходящая комбинация, счетчик [latex]c[/latex] увеличивается на 1. Так как номер шестизначный, а счетчик [latex]c[/latex] подсчитывает удачные комбинации для трехзначного числа первой части, то и для трехзначного числа второй части он будет соответствовать. Следовательно, окончательное число комбинаций будет равно [latex]c \cdot c[/latex].

Оригинальное решение: cpp.mazurok.com.
Рабочий код для тестирования на try.haxe.org: Try Haxe !

e-olymp 2392. Интересная сумма

Ссылка на e-olymp.com.

Задача
Дано трёхзначное натуральное число $n$. Определить сумму наибольшего и наименьшего трёхзначных чисел, которые могут быть образованы из числа $n$ перестановкой цифр.

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

Выходные данные
Вывести сумму наибольшего и наименьшего трёхзначных чисел

Тесты

Входные данные Выходные данные
1 123 444
2 524 787
3 100 200
4 777 1554

Код

Решение
Заданное число разбиваем на цифры: для получения сотен число делится на сто, для десятков — остаток деления на сто делится на десять, для сотен — остаток деления на десять. Все числа округляются в сторону нуля и записываются в массив, который отсортировывается с помощью функции sort, входным параметром которой является функция, которая возвращает $(0, 1$ или $-1)$. Далее проверяется, нет ли в числе нулей. Если нулей в числе нет, то сумма считается по формуле $(100·a[0]+10·a[1]+a[2]+100·a[2]+10·a[1]+a[0])=$ $=arr[0]·101+arr[1]·20+arr[2]·101$. Если же ноль есть, то делается проверка на ноль в следующем элементе. Если ноль есть, сумма считается по формуле $arr[1]·100+arr[2]·1+arr[1]·1+arr[2]·100=arr[1]·110+arr[2]·101$, иначе последний элемент умножается на $200$. Все эти проверки делаются для того, чтобы для чисел, в которых есть нули, минимальное число, которое генерируем для суммы, было трехзначным.

ML 36. Движение катера

Условие

Катер движется по течению реки из пункта в A в пункт B и обратно с собственной скоростью [latex]v[/latex] км/час. Скорость течения постоянна — [latex]u[/latex]  км/час. Расстояние между пунктами составляет [latex]s[/latex]  км. Для любых неотрицательных действительных значений расстояния и скоростей вычислите время в пути.

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

Физические величины: [latex]v[/latex] , [latex]v[/latex] , [latex]v[/latex]

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

Физическая величина [latex]t[/latex]

Решение

По условию, мы проверяем любые неотрицательные действительные значения, следовательно условие, что [latex]t[/latex] не может быть меньше нуля не выполняется только если скорость течения будет превышать скорость катера (т.е. он не сможет плыть против него).  При нарушении этого условия или при получении 0 в знаменателе будем выводить -1.
Время в пути можно найти по формуле: [latex]t=\frac{s}{v}[/latex]

Так как к нашему условие добавляется влияние течения, то  скорость по его направлению будет

[latex]v+u[/latex], а против — [latex]v-u[/latex]. Следовательно получаем формулу для нахождения времени, необходимого на преодоление пути от А до В и обратно:

[latex]t=\frac{s}{(v+u)} + \frac{s}{(v-u)}[/latex]

На TryHaxe!

Тесты

s v u t
  6   1   2   -1
  6   2   1   8
  60   12   4   11.25

Mif 17.18

Условие:

Принадлежит ли точка ([latex]x;y[/latex]) фигуре на рисунке?

Image

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

Два числа — координаты точки.

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

Слово «Yes», если точка принадлежит фигуре, в противном случае -«No».

Код:

Ход решения:

Точка будет принадлежит фигуре тогда и только тогда, когда будет выполняться одно из условий:

  • Оба числа не отрицательные и их сумма не превышает 6;
  • Оба числа не положительные, и их сумма не меньше 6.

Если одно из этих условий выполняется, то на выходе имеем «Yes», иначе — «No».

e-olymp 126. Номер квартиры

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

Условие

Многоквартирный дом имеет $N$ квартир, $P$ подъездов и $Q$ этажей, причем на каждом этаже каждого подъезда имеется одинаковое количество квартир. Определить в каком подъезде и на каком этаже находится квартира с заданным номером.

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

Значения $N$, $P$, $Q$, $K$, причем [latex]1 \leq K \leq N \leq 1000[/latex], [latex]P \cdot Q \leq N[/latex].

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

Нужно вывести номер подъезда и этаж, на котором находится квартира с номером $K$.

Тесты

Входные данные Выходные данные
250 5 5 1 1 1
30 2 5 27 2 4
300 3 10 111 2 2
80 5 4 77 5 4

Код.

Try Haxe!

5.16. Условное выражение if

Source: 5.16 if

Условные выражения начинаются с ключевого слова if  ,далее следует само условие в круглых скобках ()  и выражение, которое будет вычислено в случае выполнения условия:

Условие имеет тип Bool . Это означает, что если значение выражения, записанного в condition , является истиной true , то будет выполнено то, что далее написано в expression . Иначе — не выполнится.

После expression   может следовать ключевое слово else  для задания другого выражения, которое должно быть вычислено, если условие не выполняется:

Здесь expression2  может состоять из еще одного if  -выражения:

Если значение, вычисляемое if -выражением является необходимым для дальнейших вычислений, к примеру

то возвращаемые значения должны иметь совместимые типы. Если в данной конструкции отсутствует выражение else , возвращается выражение типа Void .

Пример. Программа сравнивает значение двух выражений: