e-olymp 2164. Шифр Юлия

Задача

Юлий Цезарь использовал свой способ шифрования текста. Каждая буква заменялась на следующую по алфавиту через [latex]k[/latex] позиций по кругу. Необходимо по заданной шифровке определить исходный текст.

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

В первой строке дана шифровка, состоящая из не более чем 255 заглавных латинских букв. Во второй строке число [latex]k (1[/latex] [latex]\leq[/latex] [latex]k[/latex] [latex]\leq[/latex] [latex]10)[/latex].

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

Требуется вывести результат расшифровки.

Тесты

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

1

WORD
2 ZABC

3

WXYZ

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

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

Каждая буква строки является элементом массива [latex]cipher[/latex]. Чтобы расшифровать строку нужно от значения [latex]i[/latex]-го элемента массива отнять [latex]k[/latex], тем самым сдвинуть символ на [latex]k[/latex] единиц по алфавиту, и заменить первоначальный символ на полученный результат. В случае если разница символа [latex]i[/latex]-го элемента и числа [latex]k[/latex] не входит в множество заглавных латинских букв, требуется от символа «Z» отнять оставшееся кол-во шагов [latex]k[/latex] (то есть не считая те которые уже были пройдены от изначального символа символа до крайнего символа «A»), и заменить первоначальный символ на полученный результат. Можно не беспокоиться о том, что символ вернется к «Z» более чем один раз так как условие исключает этот вариант ([latex]k<=10[/latex] при 26-ти символах латинского алфавита).

Используя цикл, повторяющийся столько же, сколько символов в строке [latex]cipher[/latex], требуется применить описанный алгоритм к каждому элементу массива и добавить результат в строку [latex]result[/latex]. По окончанию работы цикла, вывести строку result, содержащую уже расшифрованные символы.

А137д

Задача

Даны натуральное число [latex]n[/latex], действительные числа [latex]a_1, … , a_n[/latex] . Вычислить:

[latex]-a_1, a_2, -a_3, … , (-1)^na_n[/latex]

Тесты

[latex]n[/latex] [latex]a_1, … , a_n[/latex] [latex]-a_1, a_2, -a_3, … , (-1)^na_n[/latex] Комментарий
4 3 -2 -3 6 -3 -2 3 6 Пройден
5 40 -30 0 34.5 0.2 -40 -30 0 -34.5 0.2 Пройден
3 126 -486.95 -20.0985 -126 -486.95 20.0985 Пройден

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

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

Для начала вводим число [latex]n[/latex]. Задаем цикл для ввода ряда чисел [latex]a_1, … , a_n[/latex]. Если [latex]n[/latex] — чётное число, умножаем введенное [latex]a[/latex] на [latex]-1[/latex]. Выводим результат.

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

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

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

e-olymp 5072. Подсчет количества ребер

Задача

Ориентированный граф задан матрицей смежности.
Найдите количество ребер в графе.

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

Входной файл содержит число n (1n 100) — число вершин в графе, и затем n строк по n чисел, каждое из которых равно 0 или 1 — его матрицу смежности.

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

Выведите в выходной файл количество ребер заданного графа.

Решение

30 1 11 0 1

0 1 1

6
50 1 1 1 11 0 0 0 0

1 0 0 0 0

0 0 1 0 1

1 0 0 0 0

9
21 11 1 4

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

Количество ребер ориентированного графа равно количеству единиц в его матрице смежности. Поэтому просто считываем, суммируем найденные 1-цы, и выводим ответ.

Выполнение кода на Try Haxe !
Решение задачи на С++.

А57г. Функция

Постановка задачи

Дано действительное число [latex]a[/latex]. Вычислить [latex]f(a)[/latex], если
[latex]f(x) = \begin{cases}0, & x \le 0;\\x^2 — x, & 0 < x \le 1;\\x^2 — \sin(\pi \cdot x^2), & x > 1 \end{cases}[/latex]

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

Находим промежуток, которому принадлежит [latex]a[/latex]. Если [latex]a \in (-\infty;0][/latex], то [latex]f(a) = 0[/latex], если [latex]a \in (0;1][/latex], то [latex]f(a) = a^2 — a[/latex], в остальных случаях [latex]f(a) = a^2 — \sin(\pi \cdot a ^ 2)[/latex].

График функции:
Рисунок 1

Тесты

Входные данные Выходные данные
0 0
1 0
2 4

Реализация

Код решения на Try Haxe !

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

ML38. Максимальный размер прямоугольника, вырезанного из круга

Задача

Какого наибольшего размера прямоугольник можно вырезать из круга диаметра d, если известно, что длины его сторон образуют золотую пропорцию.

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

Единственное число — диаметр окружности.

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

Два числа — длины сторон прямоугольника.

Рисунок 1

Тесты

Входные данные Выходные данные
[latex]d[/latex] [latex]a[/latex] [latex]b[/latex]
1 0 0 0
2 1 0.850651 0.525731
3 2 1.7013 1.05146
4 21 17.8638 11.0404
5 0.32 0.272208 0.168234
6 1.7 1.44611 0.893743
7 134 113.981 70.448

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

Выполнение кода на Try Haxe !

Решение

Прямоугольник будет иметь наибольший размер в случае, когда его вершины лежат на окружности. Тогда, очевидно, диаметр окружности будет диагональю данного прямоугольника. Согласно условию, длины его сторон образуют золотую пропорцию. Это означает, что [latex]\frac { a }{ b } =\phi [/latex], где [latex]a[/latex] — длина большей стороны прямоугольника, [latex]b[/latex] — длина его меньшей стороны, а [latex]\phi=\frac { 1+\sqrt { 5 } }{ 2 } [/latex]. Отсюда [latex]a=b\cdot \phi[/latex]. По теореме Пифагора, [latex]{ a }^{ 2 }+{ b }^{ 2 }={ d }^{ 2 }[/latex]. Путём подстановки из предыдущего выражения и простых алгебраических преобразований получим формулу для вычисления длины меньшей стороны: [latex]b=d\cdot \sqrt { \frac { 1 }{ { \phi }^{ 2 }+1 } } [/latex].
Сначала для удобства находим значение [latex]\phi[/latex], затем — по указанным формулам длины сторон прямоугольника.

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

4.1. Переменные

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

Мы уже сталкивались с переменными в нескольких примерах из предыдущих статей. В переменных, как и в свойствах (но не во всех), содержатся значения:

Из примера видно, что переменная:

  1. имеет имя (в данном случае: member),
  2. имеет тип (в данном случае: String),
  3. может быть инициализирована (в данном случае значением: "bar") и
  4. может иметь  модификаторы доступа (в данном случае: static)

Метод main выведет значение переменной member присвоенное ей при инициализации, затем изменит его на «foo», и снова выведет содержимое. Значение модификаторов доступа в данном примере, объясняется в отдельной статье.

Важно заметить, что явное указание типов не обязательно, если присутствует начальная инициализация.  В этом случае, компилятор определяет тип переменной сам (см. Определение Типов).

Схема 1: Инициализация переменной.

Рассмотрим следующий пример. Воспользовавшись Схемой 1, объявим константу:

Метод main выведет: 1. (Ссылка на выполнение кода из примера)

Так как в Haxe не существует квалификатора const, в качестве альтернативы, в данном примере мы используем ключевое слово inline для статических переменных. (Подробнее про inline)

В случае, если мы попытаемся присвоить какое-либо значение константе myconst, при компиляции кода, мы получим ошибку «Cannot access field or identifier myconst for writing» (в переводе «Невозможно получить доступ для записи в поле либо идентификатор myconst«).