e-olymp 1560. Уменьшающееся число

Задание

Над целым числом можно производить следующие операции:

  1. Если число делится на 3, то делить его на 3;
  2. Если число делится на 2, то делить его на 2;
  3. Вычитать 1.

По заданному натуральному числу [latex]n[/latex] найти наименьшее количество операций, после выполнения которых получится 1.

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

Каждая строка содержит одно натуральное число [latex] n(1 ≤ n ≤ 10^{6})[/latex].

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

Для каждого значения [latex]n[/latex] в отдельной строке вывести наименьшее количество операций, после выполнения которых получится 1.

Тесты

Ввод Вывод
1
5
10
0
3
3
12
7
21
3
3
4
256
1037
8771
9022
102651
8
11
13
13
19

Код

Решение

Заведём массив на максимальное количество элементов. x[1] всегда будет равен 0, так как чтобы добраться от единицы к единице нужно 0 шагов. Затем, начиная со второго элемента, пробежимся по всему массиву до [latex]n[/latex], присваивая элементам значения предыдущих элементов, добавляя к ним единицу. Теперь остается выбрать минимум из самого элемента или элемента являющегося результатом деления(на 2 или на 3) с прибавлением единицы.

Ссылки

1.Код на Ideone
2.Условие на e-olymp

Как оформлять код?

camelCase - верблюжья нотация для записи имен, состоящих из нескольких слов

camelCase — верблюжья нотация для записи имен, состоящих из нескольких слов

Оформление кода на Java похоже на С/С++. Но есть и особенности. Например, вместо подчёркиваний в многословных (last_event) идентификаторах обычно используются заглавные буквы (lastEvent — т.н. верблюжья нотация). Советую попрактиковаться в английском и почитать как это принято делать в компании Google или Oracle. Последняя инструкция довольно старенькая, но Oracle так давно существует…
Если с чтением у Вас не все хорошо, то просто внимательно рассмотрите эти картинки. Они хоть и про JavaScript, но некоторое представление об оформлении кода Вам дадут.
Если целью является разработка класса, то по крайней мере методы класса должны быть документированы в соответствии с правилами Javadoc. Достаточно будет использовать @param и @return, которые используются в примерах.

7 вещей, которым нужно научиться, чтобы найти работу на Java


  • В первую очередь необходимо быть хорошо знакомым с JavaSE. Под знакомством я понимаю не только чтение документации по тому или иному пакету, но и умение написать небольшой иллюстративный код.
  • Второе. Необходимо иметь правильное представление об объектно ориентированном проектировании (OOD), языке UML и шаблонах. По крайней мере в пределах книги Крэг Ларман. Применение UML 2.0 и шаблонов проектирования. Или лучше Applying UML and Patterns 3rd Edition.
  • Третье. Как ни крути, а базы данных потребуются. Т.е. освежаем в памяти SQL и разбираемся с Hibernate. Обязательно пишем какой-то код, чтобы убедиться, что все поняли верно.
  • Четвертое. В большинстве компаний придерживаются тех или иных соглашений о технике взаимодействия и разработки. Нужно быть к этому готовым. Советую полистать что-нибудь по Agile software development. Более внимательно ознакомиться с Rational Unified Process. Если тема покажется интересной, то можно еще почитать про Capability Maturity Model Integration for Development. Конечно, заранее неизвестно, что использует компания работодателя. Но я не знаю случая, чтоб человеку вообще не пригодилась информация этого блока.
  • Пятое. Придется работать в команде. Будьте морально готовы применять какую-либо систему командной разработки и контроля версий. Специально тут готовиться не к чему. Скорее всего будет вполне достаточно иметь на компьютере софт, который папку проекта делает доступной для совместной разработки. Техника проста: внесли и отладили изменения в файлах — сделайте commit, чтобы это появилось у остальных. Пришли утром на работу — сделайте update, чтоб актуализировать проект.
  • Шестое. Придется работать с тестировщиками. По крайней мере нужно посмотреть на Bugzilla и понять зачем она нужна.
  • Седьмое и последнее, которое будет для вас первым. Среда разработки. Скорее всего ею окажется Eclipse. Проблема в том, что сейчас это уже не совсем среда. Чтобы правильно сориентироваться очень важно разобраться с Open Services Gateway Initiative. По крайней мере на уровне использования и создания компонент.

В этом месте обычно спрашивают — а что EJB или JPL учить не нужно?
Ответ простой — выучите на работе, главное ее (работу) получить :).
Надеюсь все у Вас получится.