В последние несколько дней я сталкиваюсь с некоторыми трудностями при попытке выполнить следующее задание. Надеюсь, вы, ребята, можете помочь:
Мне дано одно число N, и мне разрешеноВыполните любую из двух операций над N в каждом движении:
One - Если мы возьмем 2 целых числа, где N = x * y, то мы можем изменить значение N на максимальное значение междуx и y.
Два - Уменьшите значение N на 1.
Я хочу найти минимальное количество шагов для уменьшения N до нуля.Это то, что я имею до сих пор, я не уверен, каков наилучший способ реализовать функцию для нахождения делителя (someFindDevisorFunction), и если эта функция ' f ' фактически выдаст требуемый вывод.
int f(int n)
{
int div,firstWay,secondWay;
if(n == 0)
return 0;
div = SomefindDivisorFunction(n);
firstWay = 1 + f(n-1);
if(div != 1)
{
secondWay = 1 + f(div);
if (firstWay < secondWay)
return firstWay;
return secondWay;
}
return firstWay;
}
Например, если я введу число 150, результат будет: 75 - 25 - 5 - 4 - 2 - 1 - 0