Класс рациональных дробей

Задача

Напишите класс для работы с не изменяемыми (immutable) рациональными дробями используя статические методы.

Код

Код на Ideone.

Тест

Входящие данные Операция Выходящие данные
4/5

1/2

проверка равенства false
4/5

1/2

2/5

сравнение по равенству дроби и произведения двух других true
2/5

1/2

сложение 9/10
4/5

1/2

вычитание 3/10
4/5

1/2

вычитание -3/10
2/5

1/2

умножение 1/5
4/5

1/2

деление 8/5
4/5

1/2

сравнение 4/5 > 1/2
4/5

1/2

сравнение 1/2 > 2/5
4/5

1/2

2/5

сравнение дроби и произведения двух других 2/5 = 2/5

 

e-olymp 2166: Анаграммы

Задача

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

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

Два слова заданы в отдельных строках. Слова состоят из строчных латинских букв и цифр. Длины слов не превышают 255.

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

Следует вывести «YES«, если введенные слова являются анаграммами друг друга и «NO» если нет.

Решение

В задаче требуется определить являются ли два введенных слова анаграммами.
Основная проблема состоит в том, что буквы находятся в словах на различных позициях и это мешает нам просто сравнить строки. Поэтому упорядочим символы в строке по алфавиту с помощью метода Arrays.sort, который вызываем в функции sortString, которая вернет нам новую отсортированную строку.
Теперь мы можем выполнить сравнение строк с помощью функции equals(), которая вернет нам true только в том случае, если строки идентичны. В таком случае и выводим «YES», а в противном случае «NO».

Код

На Ideone.

Тест

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

marsh

YES
ananas

nnaass

NO
tommarvoloriddle
iamlordvoldemort
YES

Ссылка на задачу на e-olimp и на ее решение.

Ю4.8

Условие

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

Решение

Задаем массив и вводим элементы массива. Задавать массив менее чем из трех элементов не имеет смысла, поэтому проверяем количество элементов. Пересчитываем каждый третий элемент, запоминая сначала значение стоящего перед ним, который также отдельно пересчитываем.

Код

Ссылка на Ideone.

Тест

Входные данные Выходные данные
Размер массива Элементы
4 2 7 4 1 2.0, 3.0, 4.5, 1.0
2 5 8 Try again

e-olimp 7365 — Молоко и пирожок

Задача на e-olimp.

Условие

Ученикам первого класса дополнительно дают стакан молока и пирожок, если вес первоклассника менее 30 кг. В первых классах школы учится n учеников. Стакан молока имеет емкость 200 мл, а упаковки молока – 0,9 л. Определить количество дополнительных пакетов молока и пирожков, необходимых каждый день.

Решение

Возьмем количество пирожков за счетчик. Используя for найдем количество пирожков для детей, вес которых не превышает 30кг. По количеству пирожков мы можем найти количество упаковок молока. При этом мы можем получить не целое число. Чтобы избежать этого, используем метод ceil из класса Math для округления до целого.

Код

Ссылка на Ideone.

Тест

Входящие данные Выходящие данные
n w(вес) pack pie
4 30 29 40 25 1 2
7 21 20 22 29 26 27 26 2 7

Проверка решения на e-olimp.

e-olymp 388. Превращение

Задача на e-olimp.

Условие

Возьмем какое-нибудь натуральное число N. Будем изменять его следующим образом: если число четное, то разделим его на 2, если нечетное, прибавим 1. После нескольких таких изменений мы всегда получаем число 1. Например, из числа 11 получается число 12, затем 6, 3, 4, 2 и, наконец, 1. Таким образом, для получения 1 из 11 нужно проделать 6 изменений.

Напишите программу, которая считывает натуральное число и выводит количество изменений данного числа до получения 1.

Число N (1  ≤ N  ≤  109).

Решение

Пусть N – это число, которое мы будем изменять, а counter – количество превращений. Цикл должен выполняться до того момента, пока N \neq 1. Чтобы проверить число на чётность/нечётность, делим его по модулю и сравниваем остаток с нулём. Если число – чётное, то делим его на 2, в противном случае – добавляем единицу, и при выполнении каждого действия, увеличиваем количество превращений на 1.

Код на Ideone.

 Тест

Входные данные Выходные данные
-5 Wrong number
1 0
6 4

Ссылка на решение на e-olimp.

А58а

Задача. Дано действительное число a. Для функции f\left(x \right), график которой изображен, вычислить f\left(a \right).

58a

Для решения данной задачи требуется лишь проверка знака числа a. Если a> 0, то f\left(a \right) вычисляется как -a^{2}, а если a< 0, то f\left(a \right) равна  -a. При a=0f\left(a \right)=0.

Код на Ideone.

Тест

 Входные данные  Выходные данные
 -7 7
 7  -49
 0  0

e-olymp 67. New food for Anfisa – 2

Условие

При разрезании сыра в задаче «Сыр для Анфисы» у хозяина оставались куски сыра в виде прямоугольного параллелепипеда с разными целыми длинами сторон. Готовя новое блюдо из сыра для Анфисы хозяину приходилось разрезать эти куски на кубики со стороной 1. Какое наименьшее количество разрезов приходилось ему делать для того, чтобы разрезать заданные куски сыра, если он каждый раз разрезал один кусок сыра на две части.

Ссылка на задачу на e-olymp.
Ссылка на решение.

Решение

При разрезании сторон a, b, c мы получаем a, b, c количество частей соответственно. Следовательно, при разрезании стороны A, мы выполняем (a-1) разрезов. Тогда, при разрезании стороны B, делаем a*(b-1); при разрезании стороны C – a*b*(c-1) соответственно. Всего мы совершаем (a-1)+a*(b-1)+a*b*(c-1) разрезов. В итоге, получаем формулу a*b*c - 1.

Код

Просмотр на Ideone.

Тест

а b c Выходные данные
2 3 4 23