e-olymp 19. The degree of symmetry

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

Условие

Степенью симметрии натурального числа назовём количество пар его десятичных цифр, в которых цифры совпадают и расположены симметрично относительно середины десятичной записи этого числа. Если некоторая цифра стоит посередине десятичной записи, её тоже нужно учитывать в паре с ней самой. Найти степень симметрии числа $n$.

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

Одно натуральное число $n < 2 * 20^9$.

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

Вывести степень симметрии числа $n$.

Тесты:

Ввод Вывод
$123322$ $2$
$100$ $1$
$1010$ $0$
$1234321$ $4$
$1234567891$ $1$

Код на Haxe:

Ход решения:

Вначале считываем число. Затем раскладываем его по цифрам внутри массива (в обратном порядке, но для нашей задачи порядок цифр значения не имеет):

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

Ссылки:

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

A703

Условие
Даны квадратная матрица $A$ порядка $n$, векторы $x$ и $y$ с $n$ элементами каждый. Получить вектор $A(x+y)$.

Входные данные
Число $n$, матрица $A$, вектор $x$, вектор $y$.

Выходные данные
Результирующий вектор $A(x+y)$.

Тесты

Число $n$ Матрица $A$ Вектор $x$ Вектор $y$ Результирующий вектор $A(x+y)$
2 2 3
3 2
3 4 5 6 46 44
3 2 1 4
5 2 6
3 4 8
2 2 2 3 3 3 42 78 90
4 1 2 3 4
3 4 1 6
2 3 8 1
4 5 0 8
1 2 3 4 5 4 3 2 60 84 84 102

Решение
Вводим число $n$, матрицу $A$, вектора $x$ и $y$. Заходим в цикл в котором считаем сумму векторов $x$ и $y$. В следующем цикле считаем произведение матрицы $A$ на результат сложения векторов $x$ и $y$. Выводим результирующий вектор $res = A(x+y)$.

Try Haxe !

Ю4.12

Условие
Задача: Все ненулевые элементы матрицы $D\left(k,l\right)$ расположить в начале массива $E\left(k \times l\right)$ и подсчитать их количество..

Входные данные
Два натуральных числа $k$ и $l$. А так же $k \times l$ элементов массива.

Выходные данные
Матрица $D$, ненулевые элементы массива $E$, количество ненулевых элементов

Тесты

$k$ $l$ Матрица $D$ Ненулевые элементы матрицы $E$ Количество ненулевых элементов
2 3 2 7 0
1 4 9
2 7 1 4 9 5
3 4 6 7 4 2
9 0 1 3
0 8 0 19
6 7 4 2 9 1 3 8 19 9
4 2 8 9
0 1
5 2
7 26
8 9 1 5 2 7 26 7

Решение
Вводим числа $k$ и $l$. Получаем размерность массива $E$ — $M = k * l$. Заходим в цикл в котором вводим все элементы матрицы $D$ и считаем количество ненулевых элементов и перегоняем их в массив $E$. Потом удаляем нулевые элементы из матрицы $E$.

Try Haxe !

А412г

Ссылка на оригинальное решение

Задача:

Даны две целочисленные квадратные матрицы порядка $ 6 $. Найти последовательность из нулей и единиц $ b_1, \dots , b_6 $ такую, что $ b_i = 1 $, когда количество отрицательных и неотрицательных элементов $ i $-й строки первой матрицы совпадает соответственно с количеством отрицательных и неотрицательных элементов $ i $-й строки второй матрицы.

Тесты:

Матрица $ A $ Матрица $ B $ Выходные данные
1 1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
2  1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
0 0 0 0 0 0
3  1 1 1 1 1 1
-1 -1 -1 -1 -1 -1
1 1 1 1 1 1
1 1 1 1 1 1
-1 -1 -1 -1 -1 -1
1 1 1 1 1 1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
0 1 0 0 1 0
4 0 2 2 3 4 4
1 3 3 4 5 5
2 4 4 5 6 6
3 5 5 6 7 7
4 6 6 7 8 8
5 7 7 8 9 9
0 2 2 3 4 4
-1 3 1 4 3 5
-2 4 0 5 2 6
-3 5 -1 6 1 7
-4 6 -2 7 0 8
-5 7 -3 8 -1 9
1 0 0 0 0 0

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

 

Ссылка на tryhaxe

Решение:

Заведем массив  ans , в который будем дописывать $ 1 $, если количество неотрицательных элементов матрицы $ A $ в текущей строке совпадает с количеством неотрицательных элементов матрицы $ B $ в текущей строке, и $ 0 $  в противном случае. Проверять совпадение количества отрицательных элементов отдельно не нужно, потому как строки в матрицах одинаковой длины, т. е. количество отрицательных элементов всегда равно $ 6 — $ (количество_неотрицательных).

В цикле по переменной i  проходимся по каждой из шести строк матриц, каждый раз заводя счетчики на количество неотрицательных элементов. Цикл по j идет по столбцам матриц, проверяя каждый элемент. Если встретили неотрицательный элемент в матрице $ A $, увеличиваем счетик  a_positive . Если неотрицательный элемент попался в $ B $, увеличиваем  b_positive .

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

 

Ю4.28

Ссылка на оригинальное решение

Задача:

Каждый из элементов $ x_i $ массива $ X\left(n\right) $ заменить средним значеним первых $ i $ элементов этого массива.

Тесты:

$ n $ Входные данные Выходные данные
1  12 7 4 33 56 22 3 22 5 6 7 8 9 7 5.5 14.666666666666666 25 24.4 20.833333333333332 21 19 17.555555555555557 16.5 15.727272727272727 15.166666666666666
2  1 136 136
3  3 -1 1 0 -1 0 0
4  10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

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

Ссылка на tryhaxe

Решение:

Сохраняем в переменной  sum  сумму первых $ i + 1 $ элементов массива. Тогда среднее значение для первых $ i + 1$ элементов можно вычислить как значение  sum , деленное на количество просуммированных членов массива. Поскольку значение элемента массива под номером $ i $ для дальнейших вычислений не понадобится, можно сразу его перезаписать.

Ю 4.25

Задача

Заполнить матрицу заданного размера [latex]M(k,l)[/latex] числами 1, 2, 3, 4 так, чтобы по горизонтали, вертикали и диагонали не было одинаковых рядом стоящих чисел.

Тесты

[latex]k[/latex] [latex]l[/latex] Output
6 6
5 5

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

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

Заполняем массив с помощью формулы (j + 2 * (i % 2)) % 4 + 1. При i четном 2 * (i % 2) будет обращаться в 0. То есть в нечетных строках будут числа 1, 2, 3, 4 подряд, а в четных строках будут меняться цифры 1 на 3, 2 на 4, 3 на 1, 4 на 2.

Решение задачи на Try Haxe !

Решение этой задачи на С++ и Java.

Ю 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.

A155

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

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

Условие:

Даны натуральное число [latex]n [/latex] и действительные числа [latex] x_{1},\ldots, x_{n} [/latex] [latex](n\geq 2)[/latex]

Вычислить:

[latex]\left(\left(\frac{1}{|x_{1}|+1}+x_{2} \right)\left(\frac{1}{|x_{2}|+1}+x_{3} \right)\cdots\left(\frac{1}{|x_{n-1}|+1}+x_{n} \right)\right)[/latex]

Тесты

Ввод Вывод
$n$ $x_1, \ldots, x_n$ $k$
2 1 1 1.5
3 0.5 1 2 4.16667
3 -0.3 1 -0.5 0

Решение:

Задаем переменные [latex]n,x,k[/latex]. В цикле умножаем переменную [latex]k[/latex] каждый раз на [latex]\left(\left(\frac{1}{|x_{n-1}|+1}+x_{n} \right)\right)[/latex]. После выводим значение [latex]k[/latex].

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

A694a

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

Ссылка на решение задачи на сайте 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 Матрица
3 1 0 0

0 1 0

0 0 1

4 1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

6 1 0 0 0 0 0

0 1 0 0 0 0

0 0 1 0 0 0

0 0 0 1 0 0

0 0 0 0 1 0

0 0 0 0 0 1

Решение:

Сначала создаётся переменная [latex] h[/latex], которая задаёт размерность двумерного массива(матрицы), после чего создаётся собственно массив(матрица) указанной размерности, изначально заполненный нулями. С помощью цикла главная диагональ заполняется единицами. Далее циклом выводим массив.

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

 

Ю4.35

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

Условие:

Совместная работа. Известно время [latex]t_{1},t_{2}, \cdots,t_{n}[/latex], за которое некоторую работу может выполнить каждый из [latex]n[/latex] рабочих бригады, работая в одиночку. Сколько времени понадобится бригаде на выполнение этой работы, если они будут работать совместно (и при этом никто из них не «сачкует»)

Тесты

Количество рабочих n. Время t каждого рабочего, требуемое для выполнения некоторой работы.  Время совместной работы.
3 2 4 5 1.1
4 5 7 9 4 1.4
5 2 4 5 1 2 0.4
7 8 6 5 6 6 7 2 0.7

Решение:

В программе используются два цикла. Первый– для ввода времени каждого рабочего, а второй– для вычисления общей производительности рабочих. Call–callaboration (время совместной работы), sum – общая производительность рабочих.В данной задаче нам нужно найти время, за которое [latex]n[/latex] рабочих выполнят какую-то совместную работу. В задаче не указан  общий объём выполняемой работы, по-этому зададим его как 1. Время совместной работы находят по формуле: [latex]t_{call}=\frac{V}{\frac{V}{t_{1}}+\frac{V}{t_{2}}+\cdots+\frac{V}{t_{n}}}[/latex], где [latex]V[/latex] –  общий объём выполняемой работы, т.е – 1. Т.к в задаче не указана единица измерения времени, будем считать все в часах.

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