Cómo resolver este problema de manera eficiente (sin adivinar y verificar)

Deje que el número que está buscando sea [matemáticas] n = d_ {3} d_ {2} d_ {1} d_ {0} [/ matemáticas], la secuencia [matemáticas] (d_ {i}) _ {i \ en \ {0 \ cdots3 \}} [/ math] son ​​sus dígitos.

Su problema es equivalente al siguiente sistema de ecuaciones:

[matemáticas] \ displaystyle \ sum_ {i = 0} ^ {3} d_ {i} = 14 \\ d_ {1} + d_ {2} = 9 \\ [/ matemáticas]

[matemáticas] d_ {2} – d_ {0} = 1 \\ [/ matemáticas]

Además, [math] n [/ math] se supone que es divisible por [math] 11 [/ math].

Como resultado, tenemos la última información (de hecho, necesitábamos una cuarta ecuación para resolver adecuadamente las 4 variables desconocidas del sistema anterior) que es que:

El número [math] d_ {0} – d_ {1} + d_ {2} – d_ {3} [/ math] es divisible por 11. [1]

El resto del ejercicio consiste en resolver el sistema de ecuaciones lineales, verifique esto si encuentra alguna dificultad para resolverlo.

La respuesta final debería ser: [matemáticas] 3542 [/ matemáticas]. (Aprobado a Prasoon Trivedi, que fue el primero en obtener el resultado correcto).

Notas al pie

[1] Divisibilidad por 11

¿Cómo puedo resolver este problema de manera eficiente (sin adivinar y verificar)?

Los dígitos de un entero positivo de cuatro dígitos suman 14. La suma de los dos dígitos del medio es nueve, y el dígito de miles menos el dígito de las unidades es uno. Si el número entero es divisible por 11, ¿cuál es el número entero?

Si el número es [math] ABCD [/ math], nos han dicho que

  1. [matemáticas] A + B + C + D = 14 [/ matemáticas]
  2. [matemáticas] B + C = 9 [/ matemáticas]
  3. [matemáticas] AD = 1 [/ matemáticas]
  4. [matemáticas] ABCD [/ matemáticas] es divisible por 11.

Con (1) y (2), sabemos que [matemáticas] A + D = 5 [/ matemáticas]; con (3), encontramos [matemáticas] A = 3 [/ matemáticas] y [matemáticas] D = 2 [/ matemáticas].

Supongo que aquí es donde el OP recurrió a adivinar y verificar. El enfoque eficiente requiere conocimiento de la verificación de divisibilidad para 11:

  • Un número entero es divisible por 11 si y solo si, cuando sumamos y restamos alternativamente sus dígitos, el resultado es divisible por 11.

En este caso, eso significa que necesitamos [matemática] A-B + CD [/ matemática] es divisible por 11. Entonces:

  • [matemática] 3-B + C-2 = 1-B + C [/ matemática] es [matemática] -11 [/ matemática], [matemática] 0 [/ matemática] o [matemática] 11 [/ matemática] .

Ni [math] -11 [/ math] ni [math] 11 [/ math] son ​​posibles ([math] -11 <-B <1-B + C \ le 1 + C \ le 10 [/ math]). Entonces necesitamos [matemáticas] CB = -1 [/ matemáticas] y [matemáticas] B + C = 9 [/ matemáticas], lo que lleva a [matemáticas] B = 5 [/ matemáticas] y [matemáticas] C = 4 [/ matemáticas]: [matemáticas] \ en caja {3542} [/ matemáticas]

3542

Probablemente haya una forma más elegante de resolver esto, pero como soy un programador, escribiré un script para probar cada múltiplo de 11 entre 11 y 9999. Elijo Python, solo porque estoy más familiarizado con él. , y ya tengo un entorno de desarrollo de Python instalado en esta máquina. Me gusta la distribución Anaconda Python ya que incluye todo lo que necesito y es fácil de instalar en Windows. Este script usa Python 3.5.

# número abcd es múltiplo de 11, a + b + c + d = 14. b + c = 9. a – d = 1
# prueba cada múltiplo de 11 del 11 al 9999
para n en rango (11, 9999, 11):
# extraer los cuatro dígitos
a = int (n / 1000);
b = int ((n% 1000) / 100);
c = int ((n% 100) / 10);
d = int (n% 10);
# prueba las condiciones e imprime el resultado
if (a + b + c + d == 14 y b + c == 9 y a – d == 1):
print (‘la solución es {0: 1d} {1: 1d} {2: 1d} {3: 1d}’. formato (a, b, c, d))

Tenemos cuatro enteros, de 0 a 9, de modo que [matemática] b + c = 9 [/ matemática], [matemática] a – d = 1 [/ matemática] y [matemática] 1000a + 100b + 10c + d [/ matemática] es divisible por 11, y [matemática] a + b + c + d = 14 [/ matemática].

Una prueba de divisibilidad es que la suma alterna de dígitos es divisible por 11, es decir, [matemática] a – b + c – d [/ matemática] también es divisible por 11.

Esto reduce bastante el espacio de búsqueda, porque esa suma debe estar entre -18 y 18, por lo que los únicos valores posibles son -11, 0 y 11.

La otra cosa a tener en cuenta es que el término [math] ad [/ math] está presente en la suma alterna, por lo que tenemos

[matemáticas] 1 -b + c \ in \ {-11, 0, 11 \} [/ matemáticas]

pero eso reduce nuestras opciones aún más porque la mayor [matemática] c [/ matemática] podría ser 9, lo que no nos lleva a 11, solo a 10 como máximo. Del mismo modo, no podemos bajar a -11, por lo que la ecuación debe ser

[matemáticas] 1 – b + c = 0 [/ matemáticas]

Ahora tenemos dos ecuaciones en dos incógnitas para poder resolver [matemáticas] b [/ matemáticas] y [matemáticas] c [/ matemáticas] a través de métodos estándar, y luego conectar los resultados en las dos ecuaciones restantes para [matemáticas] a [ / math] y [math] d [/ math].

a + b + c + d = 14

b + c = 9

Entonces, a + d = 5

ad = 1

De las últimas dos ecuaciones establecemos a = 3, d = 2.

Si el número entero es divisible por 11, entonces estamos hablando de a * 100 + x * 10 + d tal que a * 1000 + (a + x) * 100 + (x + d) * 10 + d es el número entero.

Terminamos con dos ecuaciones más: 3 + x = by 2 + x = c, así que junto con b + c = 9 la solución es b = 5, c = 4.

El entero es 3542.

La suma de todos los dígitos es 14, la suma de los dígitos medios es 9, la suma de los dígitos restantes es 5, la diferencia entre ellos es 1. Entonces son 3 xy 2. Para ser divisible por 11 3 + y = x + 2. Nuevamente, la suma es 9, la diferencia es 1, es 5 y 4. Respuesta

3542