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

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

Для нумерации  latexm страниц книги использовали latexn цифр. По заданному latexn вывести latexm или latex0, если решения не существует. Нумерация начинается с первой страницы.

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

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

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

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

Тесты

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

Код

 

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

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

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

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

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

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

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

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

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

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

Тесты

Входные данные Выходные данные
1 5 Spring

Код

 

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

Для решения данной задачи необходимо использовать переменную с целочисленным значением, которое соответствует порядковому номера месяца (от latex1 до latex12 включительно). Вводим переменную и выводим, какому времени года принадлежит введённый нами месяц, поочерёдно проверяя, какому из условий удовлетворяет переменная.

 

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

e-olymp 935. Разложение три цифрового числа

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

Разложить заданное трицифровое число на цифры.

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

В единственной строке задано целое трицифровое число.

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

Вывести каждую цифру в новой строке. Порядок вывода приведён в примере.

Тесты

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

3

5

2 267 2

6

7

3 -178 1

7

8

Код

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

Для начала задаем переменную(a) в которой будет трехзначное число, которое мы вводим с клавиатуры. Затем проверяем: отрицательное или положительное это число. Для того чтобы получить первую цифру этого числа воспользуемся простой формулой latexa/100 , вторую цифру по формуле — (a / 10) % 10, и третью a % 10.

Посмотреть, как работает программа со входными данными — 173 можно на сайте  ideone.

e-olymp 2820. Перемещение коня

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

Ссылка на задачу с сайта e-olymp

Ваш друг проводит научные исследования по проблеме Конского Минимального Путешествия (КМП), которая состоит в том, чтобы найти кратчайший замкнутый тур ходов конём, который посещает каждую клетку заданного набора из n клеток на шахматной доске ровно один раз. Он считает, что самая трудная часть задачи состоит в определении наименьшего числа ходов для перемещения коня между двумя заданными клетками и что, как только вы поможете ему решить эту подзадачу, то ему решить всю задачу будет намного легче.

Вы, конечно, знаете, что дело обстоит как раз наоборот. Таким образом, вы в свою очередь решили предложить ему самому написать программу, которая решает «трудную» часть.

Ваша задача состоит в том, чтобы написать программу, которая принимает координаты двух клеток n и b в качестве входных данных, а затем определяет количество ходов конем кратчайшим путём из a в b.

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

Входные данные будут содержать один или более тестов. Каждый тест состоит из одной строки, содержащей координаты двух клеток, разделенные одним пробелом. Координаты клетки являются двумя символами, первый из которых буква (ah), задающая столбец и второй – цифра (18), задающая строку на шахматной доске.

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

Для каждого теста вывести одну строку следующего содержания: «Путь от xx к yy занимает n шагов»

Тест

Пример входных данных Пример выходных данных
e2 e4 Путь от e2 к e4 занимает 2 шагов.
a1 b2 Путь от a1 к b2 занимает 4 шагов.
b2 c3 Путь от b2 к c3 занимает 2 шагов.
a1 h8 Путь от a1 к h8 занимает 6 шагов.
a1 h7 Путь от a1 к h7 занимает 5 шагов.
h8 a1 Путь от h8 к a1 занимает 6 шагов.
b1 c3 Путь от b1 к c3 занимает 1 шагов.
f6 f6 Путь от f6 к f6 занимает 0 шагов.

 

Решение

Ссылка на решение задания с сайта e-olymp

Ссылка на решение задания на онлайн компиляторе Ideone.com

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

Для начала объявим переменные aи b типа char, где a и b — это координаты двух клеток. В цикле при помощи форматированного ввода по шаблону вводим 4 переменных, в которых a, ny — координата одной клетки и b, ty — координата другой клетки. nx — цифровая координата, которую мы получаем из буквы, отнимая от a.  Создаем очередь, добавляем начальную клетку и ищем все возможные ходы пока не попадем в нужную клетку. Чтобы получить длину пути, нужно хранить длины путей до данной клетки в матрице и обновлять ее, по ходу продвижения. Длина в начальной клетке — 0, а длина в каждой последующей — 1. На экран выводим количество шагов, которые необходимо сделать конем, чтобы попасть из одной клетки в другую.

e-olymp 975. Флойд

Задача

Постановка задачи на e-olymp.

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

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

В первой строке содержится количество вершин графа n (1n100). В следующих n строках находится по n чисел, которые задают матрицу смежности графа. В ней -1 означает отсутствие ребра между вершинами, а любое неотрицательное число — присутствие ребра данного веса. На главной диагонали матрицы всегда расположены нули.

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

Вывести искомое максимальное кратчайшее расстояние.

Тесты

n matrix Результат
1 4 0   5   9   -1
-1   0   2   8
-1   -1   0   7
4   -1  -1   0
16
2 3 0   -1   2
2    0  -1
4    1   0
4
3 5 0  -1  -1  3  4
2  0  3  -1  4
-1  4  0  -1  4
3  -1  2  0  1
1  1  -1  -1  0
8

Ссылка на успешно пройденные тесты на сайте e-olymp.

Решение

Проверить работу кода можно в облаке по ссылке — Ideone.

Пояснения

Данная задача решается при использовании алгоритма Флойда-Уоршелла, суть которого состоит в нахождении длин кратчайших путей между всеми парами вершин во взвешенном ориентированном графе. Код данного алгоритма можно наблюдать в цикле по i, в котором имеются два вложенных цикла по j и по k. Здесь мы проходим по элементам матрицы смежности графа, проверяя существует ли ребро между вершинами. Далее следуя алгоритму Флойда выполняем следующее действие — с помощью функции Math.min()  находим минимальный путь из одной вершины в другую, записывая  его в матрицу. По нахождении всех кратчайших путей, находим максимальный из них, и выводим его в консоль.

e-olymp 912. Количество предложений

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

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

Определить количество предложений в заданном фрагменте текста на английском языке, количество символов в котором не превышает 250. Гарантируется, что в тексте отсутствуют тире, дефисы, цифры и числа.

Тесты

Входные данные: строка — фрагмент текста

Выходные данные: количество предложений в заданной строке

Входные данные Выходные данные
1 Hello World! 1
2 Don’t fall in love with programming languages: they hurt 0
3 Is this a string!? This string… 2
4 Winter. Winter? Winter! 3

Код

Код доступен на ideone

Результаты проверки доступны на e-olymp

Пояснение

Для хранения заданной строки будем использовать переменную  string типа  String, которая будет проинициализирована значением из стандартного потока ввода, а для хранения результата — переменную sentenceCount  типа int , которую проинициализируем числом 0. Переменные объявляются в начале программы.

Каждое предложение может заканчиваться точкой, восклицательным знаком или вопросительным знаком, или же комбинацией этих символов (например, многоточием). Для анализа строки воспользуемся средствами для работы с регулярными выражениями. Для хранения шаблона, по которому будет производиться поиск, используется класс  Pattern, переменной типа которого присваивается шаблон, получаемый из строки-регулярного выражения с помощью статического метода этого класса Pattern.compile() . В данном случае переменная  pattern инициализируется шаблоном, получаемым из регулярного выражения [.!?]+, которое соответствует условиям задачи

Для того, чтобы произвести сравнение строки с шаблоном, используется класс  Matcher, переменной типа которого нужно присвоить возвращаямое значение метода  match() класса Pattern , который принимает строку. Для подсчета количества предложений воспользуемся методом find() класса  Matcher, который проверяет, есть ли далее в данной строке подстрока, соответствующая заданному шаблону, и возвращает  true , если подстрока найдена, или  false , если нет. Подсчет количества предложений производится путем вызова данного метода в цикле до тих пор, пока он не вернет  false — результатом подсчета будет количество итераций цикла.

Результат работы программы — вывод значения переменной sentenceCount.

 

 

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

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

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

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

Тесты

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

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

Входные данные Выходные данные
1 12 Winter
2 5 Spring
3 7 Summer
4 10 Autumn

Код

Код доступен на ideone

Результаты проверки доступны на e-olymp

Пояснение

Для хранения номера месяца будем использовать переменную  monthNumber типа  int, а для хранения названия времени года — переменную seasonName  типа String. Обьявим эти переменные в начале программы. Проинициализируем переменную  monthNumber значением из стандартного потока ввода. Переменную  seasonName проинициализируем значением, которое определяется с помощью тернарных операторов, с помощью которых поочередно проверяется соответствие значения переменной  monthNumber  определенному времени года: если остаток от деления номера месяца на 12 будет меньше, чем 3, то переменная будет проинициализирована значением «Winter»; если номер месяца меньше, чем 6 — значением «Spring» ; если меньше, чем 9 — значением «Summer»; значением «Autumn» в иных случаях. Результат работы программы — вывод значения переменной  seasonName.

 

 

e-olymp 6122. Простой стек

Задача

Формулировка задания на e-olymp.

Реализуйте структуру данных «стек». Напишите программу, содержащую описание стека и моделирующую работу стека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы:

  • push n — Добавить в стек число n (значение n задается после команды). Вывести ok.
  • pop — Удалить из стека последний элемент. Программа должна вывести его значение.
  • back — Вывести значение последнего элемента, не удаляя его из стека.
  • size — Вывести количество элементов в стеке.
  • clear — Очистить стек и вывести ok.
  • exit — Вывести bye и завершить работу.

Гарантируется, что набор входных команд удовлетворяет следующим требованиям: максимальное количество элементов в стеке в любой момент не превосходит 100, все команды pop и back корректны, то есть при их исполнении в стеке содержится хотя бы один элемент.

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

Каждая строка содержит одну команду.

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

Для каждой команды вывести в отдельной строке соответствующий результат.

Тесты

 Входные данные  Выходные данные
            push 2                             push 3                             push 5                              back                                 size                                   pop                                 size                                  push 7                             pop                                clear                                 size                                   exit                     ok                                       ok                                       ok                                        5                                        3                                        5                                        2                                       ok                                        7                                       ok                                        0                                      bye

Отмечу так же, что программа успешно прошла все тесты на сайте e-olymp со следующими результатами.

Решение

Проверить работу кода можно в облаке по ссылке — Ideone.

Пояснения

Структура класса Stack из себя представляет следующее:

  • Динамический массив   storage  типа  Vector<Integer> , который, по сути, и является хранилищем элементов стека;
  • Конструктор, в котором происходит инициализация вектора  storage ;
  • Метод  push(int number)  типа void , который принимает как параметр число, и заносит это число в стек;
  • Метод  pop()  типа  int , который возвращает значение верхнего элемента стека и извлекает его;
  • Метод  back()  типа  int , который возвращает значение верхнего элемента стека, без его извлечения;
  • Метод  size() , который возвращает количество элементов, находящихся в стеке;
  • Метод  clear() , который очищает стек;
  • Метод exit()  типа String , который возвращает строку «bye».

e-olymp 108. Среднее число

Задача

Дано три различных числа abc. Вывести среднее из них.

Условие задачи на e-olymp.

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

Числа  abc — целые и по модулю не превышают 1000.

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

Единственное число — ответ на задачу.

Тесты

 №         a         b          c     Результат
  1         5         7          9              7
  2         7         5          9              7
  3         9         7          5              7
  4         7         9          5              7
  5         5         9          7              7
  6         9         5          7              7

Решение

Проверить работу кода можно в облаке по ссылке — Ideone.

Пояснения

В первом условии  if((a > b && b > c)||(c > b && b > a)) , мы проверяем оба условия при которых при выполнении любого из них средним числом будет второе число. В следующем условии  else if ((b > a && a > c)||(c > a && a > b )) , проделываем точно такую же операцию, только уже с первым числом. Если же два предыдущих условных оператора не выполняются, то результат будет таков, что средним числом будет являться третье число.