e-olymp 2162. Палиндром

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

Ссылка на рабочий код

Ссылка на e-olymp

Задача
Палиндром — это строка, которая одинаково читается слева направо и справа налево. Составьте программу, которая проверяет, является ли заданный текст палиндромом. Не забудьте, что при чтении пробел никак не произносится.

Входные данные
Дана строка [latex]S[/latex], [latex]|S| \leq 255[/latex], состоящая из строчных латинских букв и пробелов. Под [latex]|S|[/latex] подразумевается длина строки

Выходные данные
Вывести «Yes», если текст является палиндромом, и «No», если не является.

Тесты

Входные данные Выходные данные
a roza upala na lapu azora Yes
my gym Yes
palindrom No
character No

Код

Решение
Со входного потока считываем строку. Так как пробелы не должны учитываться, то легче будет работать со строкой без пробелов. Поэтому, пользуясь пространством имен StringTools, заменим все вхождения пробелов на пустые строки (инчае говоря, удалим все пробелы). Флаг ok в конце будет использован для вывода соответствующего сообщения. В цикле поочередно проверяем на равенство противоположные элементы строки. В случае единого несовпадения устанавливаем флаг в false и останавливаем цикл. Выводим сообщение в выходной поток.

2.1.2 Переполнение

Ссылка на manual

Ссылка на код демонстрации

По причинам производительности компилятор Haxe не осуществляет переполнения. Задача проверки на переполнения лежит на конечной платформе. Вот несколько примеров поведения при переполнении на разных платформах:

  • С++, Java, C#, Neko, Flash: 32-битное целое число со знаком с обычным поведением при переполнении
  • PHP, JS, Flash 8: нет типа int, потеря точности случится в случае достижения лимита float($2^{52}$)

В качестве альтернативы можно использовать классы Int32 и Int64 для уверенности, что будет правильное поведение при переполнении независимо от платформы, но ценой дополнительных вычислений в зависимости от платформы.

Пример поведения при переполнении продемонстрирован в коде ниже. Переменная i, выходя за пределы Int, приобретает отрицательное значение, а затем при декременте на единицу — крайнее положительное значение

Заметка: данный код следует выполнять в среде HaxeDevelop, так как на Try Haxe! он (код) приобретает другое поведение

e-olymp 2163. Сообразим на троих!

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

Ссылка на Try Haxe!

Ссылка на e-olymp

Задача
К Василию приехали два его друга с отличной новостью: они выиграли в лотерею $n$ рублей. Поскольку лотерейный билет был получен на сдачу во время общей закупки в магазине, то его принадлежность определить не удалось. Было решено разделить выигрыш поровну. Василий хотел бы узнать, можно ли честно разделить выигрыш.

Входные данные
Одно натуральное число $n$, количество знаков которого не превышает 255.

Выходные данные
Вывести «Yes», если входное число делится на 3, и «No», если не делится.

Тесты

Входные данные Выходные данные
33 Yes
0 Yes
1 No
1234567890987654321 Yes
12345678901 No

Код

Решение

Для начала вводим строку, где будет хранится наше число. Будем считать сумму цифр числа, т.к. число делится на 3, если сумма его цифр делится на 3. Для этого создаем переменную $sum$, в которой будет хранится сумма цифр. Запускаем цикл от 0 до размера  строки (количество цифр в числе). В цикле суммируем цифры числа, преобразуя каждый символ в Int с помощью функции parseInt. Далее проверяем — если сумма цифр делится по модулю на 3, то выводим «Yes», если нет — то «No».

А694а

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

Ссылка на Try Haxe!

Задача
Получить квадратную матрицу порядка [latex]n[/latex] [latex]\begin{pmatrix}1 &0 &\cdots & 0 \\ 0 & 1 &\cdots &0 \\ \cdots &\cdots &\cdots \cdots & \cdots \\ 0 & 0 & \cdots & 1\end{pmatrix}[/latex]

Тесты

n Матрица
2 [latex]\begin{pmatrix}1 & 0 \\ 0 & 1 \end{pmatrix}[/latex]
4 [latex]\begin{pmatrix}1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}[/latex]

Код

Решение
Из входного потока считываем $n$ — размер матрицы. Создаем матрицу со значением ноль по умолчанию. Затем в цикле заполняем главную диагональ единицами.

Ю 4.33

Решённую задачу на C++ можно просмотреть здесь

Задача
Для заданной матрицы [latex] A(m,n) [/latex] найти её норму: [latex] \left \| A \right \|_{1} = \max\limits_{i=1,m} \sum\limits_{k=1}^{n} \left | a_{ik} \right |[/latex].

Входные данные
$m$ и $n$ — размеры матрицы, $x$ — временная переменная для хранения следующего значения из входного потока

Выходные данные
$norm$ — норма матрицы

Тесты

Матрица Построчные суммы Вывод
[latex] \begin{pmatrix} 1 & -3 & 2 & 4 & 0 \\ -3 & -7.5 & 2.3 & -3.1 & 2.8 \\ 3.4 & -4.5 & 0 & 0 & 2 \\ 3.2 & 4.7 & 2.8 & -3.1 & -4.3 \end{pmatrix} [/latex] [latex] \begin{matrix} 10 \\ 18.7 \\ 14.4 \\ 18.1 \end{matrix}[/latex] 18.7

Код

Решение
Нам понадобятся два цикла: во внешнем будем искать максимум, пробегая по всем строкам матрицы; во внутреннем будем для фиксированной строки вычислять сумму абсолютных величин её элементов. Если эта сумма превосходит текущую максимальную, обновляем последнюю. Поскольку все наши суммы будут неотрицательными числами, изначально присвоим переменной max значение 0.

А136д

Задача. Даны натуральное число $n$, действительные числа [latex]a_{1}, \ldots, a_{n}[/latex]. Вычислить: [latex]a^{2}_{1} + \ldots + a^{2}_{n}[/latex].

Входные данные
$n$ — количество элементов последовательности ($n > 0$). $a$ — значение элемента, прочитанного из входного потока

Выходные данные
$sum$ — переменная для хранения суммы последовательности

Тесты

$n$ $a$ $sum$
2 5, 8 89
3 6, 13, 4 221
7 2, 4, 8, 16, 32, 64, 128 21844

Код

Решение
Из входного потока считывается число $n$ — кол-во элементов последовательности. Затем начинается цикл с условием «пока $n$ не равно нулю». Из входного потока считывается следующий элемент. К переменной $sum$ суммируются вычисления $a * a$, после чего декрементируется $n$. В выходной поток подаётся значение переменной $sum$.

e-olymp 127. Баксы в банке

Ссылка на оригинальную статью
Ссылка на e-olymp
Ссылка на Try Haxe!

Задача
Папа Карло подарил Буратино 1 доллар в его первый день рождения, а экономный Буратино сложил подарок в банку. Каждый последующий год папа Карло удваивал свой предыдущий подарок и прибавлял к нему столько долларов, сколько лет исполнилось Буратино, а тот в свою очередь продолжал складывать баксы в банку. На какой $N$-й день рождения в банке будет не менее, чем $S$ долларов?

Входные данные
Единственное число — значение $S$ ([latex]1 \le S \le 240[/latex]).

Выходные данные
Искомое значение $N$.

Тесты

Входные данные Выходные данные
15 3
25 4
9 3
99 5
199 6
333 7

Код

Решение
В данной задаче $sum$ — сколько долларов в банке, $p$ — сколько долларов Папа Карло подарил Буратино. Пока $s > sum$ мы инкрементируем $n$ и считаем сколько Папа Карло подарит Буратино $p = p * 2 + n$ и суммируем его с тем что лежит в банке — $sum += p$. После этого в выходной поток подаётся $n$.

e-olymp 923. Время года

С решением этой задачи на языке С++ можно ознакомиться здесь

Приведенный код можно выполнить здесь

Задача
Определить название времени года по заданному номеру месяца, используя составные условия.

Входные данные
Одно число — номер месяца.

Выходные данные
Для весенних месяцев вывести Spring, для летних — Summer, для осенних — Autumn и для зимних — Winter.

Тесты

Входные данные Выходные данные
1 Winter
4 Spring
6 Summer
10 Autumn

Код

Решение
Для решения данной задачи необходимо использовать переменную с целочисленным значением, которое соответствует порядковому номера месяца (от 1 до 12 включительно). Сразу получаем результат — остаток от деления на 12 — тем самым получается число от 0 до 11. Это позволяет разместить все зимние месяцы подряд. С помощью тернарной операции проверяем, к какому времени года принадлежит введённый месяц. В качестве результата в выходной поток выводится значение переменной типа String, равное одному из 4 вариантов: Winter, Spring, Summer или Autumn.

ML21

Просмотреть рабочий код можно здесь
Ссылка на задачу, решённую на С++
Задача. Найти сумму членов арифметической прогрессии $a, a + d, a + 2d, \dots, a + (n — 1)d$ по заданным значениям $a$, $d$ и $n$

Тесты

$a$ $d$ $n$ $S_{n}$
8 657 0 0
5 0 2 10
2 2 2 6
5 8 1 5
0 5565 88 21302776

Код

Алгоритм

Для выполнения задачи была использована формула суммы арифметической прогрессии — [latex] S_{n} = \frac{2a_{1} + d(n — 1)}{2} * n [/latex]. $a_{1}$ — первый член арифметической прогрессии, $d$ — разница арифметической прогрессии и $n$ — номер последнего члена суммы. В выходной поток подаётся результат вычислений по данной формуле