Hay una recta numérica con puntos enteros. Empiezas en 0. Puedes moverte (saltar) de dos maneras: ‘a’ avanza o ‘b’ retrocede a la vez. Si se da un entero de destino particular, x, (x> = 0), ¿cómo encontrar el número mínimo de saltos necesarios para llegar al destino?

si se devuelve INT_MAX, entonces no es posible llegar al destino

#include

#include

usando el espacio de nombres estándar;

int mini (int a, int b, int c, int d) {

int arr [4], min = INT_MAX, i;

arr [0] = a; arr [1] = b; arr [2] = c; arr [3] = d;

para (i = 0; i <4; i ++)

if (arr [i] <min) {

min = arr [i];

}

retorno min;

}

// Función para contar el número de pasos necesarios para alcanzar un

// destino.

// fuente -> vértice fuente

// paso -> valor del último paso dado

// dest -> vértice de destino

pasos int (int source, int step, int dest, int a, int b)

{

if (abs (fuente)> (dest)) devuelve INT_MAX;

if (fuente == dest) retorno paso;

int pos = pasos (fuente + a, paso + 1, dest, a, b);

int neg = pasos (fuente-b, paso + 1, dest, a, b);

// int p2 = pasos (fuente-a, paso + 1, dest, a, b);

// int n2 = pasos (fuente-b, paso + 1, dest, a, b);

// mínimo de ambos casos

// devuelve mini (pos, neg, p2, n2);

retorno min (pos, neg);

}

int main ()

{

int dest, a, b;

cin >> a >> b >> dest;

cout << pasos (0, 0, dest, a, b);

devuelve 0;

}

Digamos que hay una función F (i) tal que para cualquier número entero i da los pasos mínimos para alcanzar x desde i.
Casos base:
1) F (xa) = 1; F (x + b) = 1, F (x) = 0;
Recursividad
2) F (i) = min {F (i + a), F (ib)}