Шифровка

Условие задачи

Взята с сайта.
Мюллер много раз пытался поймать Штирлица с поличным, но тот всё время выкручивался. Как-то раз Штирлиц просматривал электронную почту. В это время незаметно вошел Мюллер и увидел, как у него на экране появился бессмысленный набор символов. «Шифровка», — подумал Мюллер. «UTF-8», — подумал Штирлиц.
Известно, что Штирлиц шифрует текст следующим образом:

1)Убирает все пробелы и знаки препинания.
2)Заменяет все подряд идущие одинаковые буквы на одну такую букву.
3)Многократно вставляет в произвольное место текста две одинаковых буквы.

Попробуйте восстановить текст, каким он был после второго шага. Для этого удалите из текста все пары одинаковых символов, добавленные на третьем шаге.

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

aaxxHuuuuelllnnloxxvvoo!

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

Hello!

Решение с использованием функционала класса String

Решение с использованием функционала структуры данных ArrayList

Решение

Записываем строку в переменную типа $latex String$. Записываем ее в $latex ArrayList$ посимвольно. В следующем цикле добавляем проверку на индекс текущего элемента чтобы не выйти за пределы списка и проверяем совпадают ли ближайшие 2 символа, если да то удаляем их, если нет то переходим к следующему шагу цикла. По его окончанию выводим элементы списка.
Пример решения со строками на ideone.
Пример решения с списком на ideone.

Ю 4.24

Задача:

В массиве [latex]A[n][/latex] каждый элемент, кроме первого, заменить суммой всех предыдущих элементов.

 
Вводимые данные Предполагаемый вывод Комментарий
1 1 1 1 1 1 1 1 2 3 4 5 Тест пройден
1 2 3 4 5 6 7 8 9 1 1 3 6 10 15 21 28 36 Тест пройден
3 5 2 9 0 4 65 156 1 3 3 8 10 19 19 23 88 244 Тест пройден
2 -7 3 8 -4 5 -2 4 2 2 2 -5 -2 6 2 7 5 9 Тест пройден

Код:

Описание:

Простейшие операции с массивом. С помощью цикла записываем данные в массив, после чего, снова с помощью цикла, записываем новые данные во второй массив. Далее выводим результат.

Алгоритм:

  1. Объявление переменной и ввод размерности массива.
  2. Создание массива.
  3. Создание цикла, для записи вводимых данных в массив.
  4. Создание нового  массива.
  5. Создание цикла, для ввода обработанных данных в новый массив.
  6. Создание цикла, для вывода результата.
  7. Окончания работы программы.

Работающая версия программы на Ideone.com

Ссылка на источник

AL6

Условие

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

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

$latex ({([])})$

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

Yes.

Код

Решение

Арифметическое выражение является правильным если каждой открывающей скобке соответствует единственная закрывающая. Что бы убедится в правильности выражения необходимо создать класс $latex stack$, в который поочередно записываются открывающиеся скобки. Если встречается закрывающая скобка того же типа, что и последняя открывающая, то они обе удаляются, так как не влияют на правильность выражения. Если же закрывающая скобка не соответствует типу последней открывающей, то такое арифметическое выражение не является правильным. Если после обработки всей последовательности в стеке не осталось элементов, то такое выражение является правильным. В случае отсутствия скобок выражение также правильное.

Пример работы программы можно увидеть на сайте ideone.
Условие задачи.

Монстр

Ссылка на оригинал задачи

Задача:

Монстр гонится за Риком и Морти на другой планете. Они настолько напуганы, что иногда кричат. Точнее, Рик кричит в моменты времени [latex]b,[/latex] [latex]b + a,[/latex] [latex]b + 2a,[/latex] [latex]b + 3a,[/latex]…, а Морти кричит в моменты времени [latex]d,[/latex] [latex]d + c,[/latex] [latex]d + 2c,[/latex] [latex]d + 3c,[/latex]….

Монстр поймает их, если в какой-то момент времени они закричат одновременно. Так что он хочет знать, когда он поймает их (первый момент времени, когда они закричат одновременно) или они никогда не закричат одновременно.

Ввод:

Первая строка входных данных содержит два целых числа [latex]a[/latex] и [latex]b[/latex]  [latex](1\leq a,[/latex]  [latex]b\leq 100).[/latex]

Вторая строка входных данных содержит два целых числа [latex]c[/latex] и [latex]d[/latex] [latex](1\leq c,[/latex]  [latex]d\leq 100).[/latex]

Вывод:

Выведите первый момент времени, когда Рик и Морти закричат одновременно, или  - 1, если они никогда не закричат одновременно.

Тесты:

Ввод
Вывод
20 2
9 19
82
2 1
16 12
-1

Код:

Решение:

В этих моментах времени, заданных прогрессиями, изменяется только коэффициент при [latex]a[/latex] и [latex]c.[/latex] Создадим для них 2 цикла. Так как равных моментов времени может быть много, а нам нужен только первый, создаем вектор и ,когда моменты равны, добавляем в него этот момент. Затем, уже вне цикла, проверяем пустой ли вектор, и в таком случаем выводим -1, так как моменты на данном промежутке не были равны ни разу. Если же вектор непустой, выходим первый элемент вектора. Он и будет искомым первым одновременным криком.

 

Версия программы на Ideone.com

Ссылка на источник

А136л

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

Даны натуральное число $latex n$, действительные числа $latex a_1,\cdots,a_n$. Вычислить: $latex |a_1*a_2*\cdots*a_n|$.

Тесты

$latex n$ $latex a_1$ $latex a_2$ $latex a_3$ $latex a_4$ $latex a_5$ $latex a_6$ $latex a_7$ $latex a_8$ $latex k$
4 5 -3 2 1 5.477225575051661
5 2 7 4 3 5 28.982753492378876
3 4 4 0 0
5 3 8 6 2.8 1.3 22.894541

Код

 

Описание решения

Объявляем переменную $latex n$ (количество элементов — это целое число, поэтому используем тип int) и переменную $latex p$ (произведение), она может быть вещественной, поэтому выбираем тип double.

В цикле for считываются элементы $latex a_1,\cdots,a_n$, где   вычисляется их произведение.

После цикла вычисляется корень из модуля произведений элементов.

Посмотреть, как работает программа можно на сайте  ideone.
Задача была переделана из данного решения.

e-olymp 109. Нумерация

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

Для нумерации  $latex m$ страниц книги использовали $latex n$ цифр. По заданному $latex n$ вывести $latex m$ или $latex 0$, если решения не существует. Нумерация начинается с первой страницы.

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

Единственное число n. В книге не более 1001 страницы.

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

Искомое количество страниц.

Тесты

Входные данные Выходные данные
1 27 18

Код

 

Описание решения

Для решения данной задачи необходимо использовать переменную с целочисленным значением, которое соответствует количеству цифр использованных для нумерации страниц. Вводим переменную и выводим, какому количеству страниц соответствует данная величина используя логарифм по основанию $latex 10$.

Посмотреть, как работает программа со входными данными 27 можно на сайте  ideone.
Задача решена на основе данного решения.

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

Задача. Подсчитайте количество счастливых билетов, у которых сумма первых трёх цифр равна N(N≤27). Счастливым билетом называется билет с шестизначным номером, у которого сумма первых трёх цифр равна сумме трёх последних.

Тесты

Число N 3 27 26 1 10
Количество билетов 100 1 9 9 3969

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

Код можно увидеть тут.

Алгоритм

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

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

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

Ссылка на авторское решение задачи.