Улучшить алгоритм нахождения числа

251
04 февраля 2019, 00:00

Передо мной стоит задача - получить из единицы вводимое пользователем число (не более 10^6), используя либо умножение на 2, либо умножение на 3, либо инкремент, при этом число операций должно быть минимальным. Написанный мной алгоритм решает задачу "с конца" и пробное число 32718 получает за 19 операций, однако по условию известно, что минимальное число операций - 17. Подскажите, как можно улучшить данный алгоритм, чтобы он мог выбирать, когда выгоднее умножить на два, а когда - на три?

public class Main {
static int n = 32718; // к этому числу необходимо прийти
static int n1;
static int start = 1; // начальное число
static int counter = 0;
static int[] operations = new int[30]; // массив, в который записываются результаты вычислений
public static void main(String[] args) {
    int counter = 0;
    System.out.println(n);
    operations[counter] = n;
    while (n > start) {
        n1 = n-1;
        if (n % 3 == 0) {  // проверка кратности трем
            n /= 3;
            operations[counter] = n;
            counter++;
        }
        else if(n1 % 3 == 0) // проверка числа н-1 кратности трем
        {
            n--;
            operations[counter] = n;
            counter++;
            n /= 3;
            operations[counter] = n;
            counter++;
        }
        else if (n % 2 == 0) { // проверка кратности двум
            n /= 2;
            operations[counter] = n;
            counter++;
        }
        else { // декремент
                n--;
                operations[counter] = n;
                counter++;
            }
    }
        System.out.println(counter);
       for (int i = operations.length - 1; i >= 0; i--) { // вывод исходного числа и промежуточных чисел в обр. порядке
            System.out.print(operations[i] + ", ");
        }
    }
}
READ ALSO
Как отследить удержание кнопки в java?

Как отследить удержание кнопки в java?

Возможно ли через KeyListener отследить удерживание кнопки? Если да, то как?

200
JPA, Hibernate. Unable Create

JPA, Hibernate. Unable Create

Бьюсь второй день с этимПомогите, пожалуйста

235
Как создать Notification без всплывающего окна

Как создать Notification без всплывающего окна

Подскажите пожалуйста как создать Notification без всплывающего окнаНапример как в google mail - при поступлении письма появляется иконка приложения...

211
Почему ProcessBuilder не запускает скрипт сразу?

Почему ProcessBuilder не запускает скрипт сразу?

Есть небольшой планировщик который должен запускать java приложения иcпользуя java -jar /

175