Передо мной стоит задача - получить из единицы вводимое пользователем число (не более 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] + ", ");
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Возможно ли через KeyListener отследить удерживание кнопки? Если да, то как?
Подскажите пожалуйста как создать Notification без всплывающего окнаНапример как в google mail - при поступлении письма появляется иконка приложения...
Есть небольшой планировщик который должен запускать java приложения иcпользуя java -jar /