Tema:
Xiao Ming está impaciente, cuando estaba en la escuela primaria, a menudo copiaba mal las preguntas que su maestro escribía en la pizarra.
Una vez, el maestro hizo la pregunta: 36 x 495 =?
Él la copió: 396 x 45 =?
Pero el resultado fue dramático, ¡y su respuesta resultó ser correcta! !
Dado que 36 * 495 = 396 * 45 = 17820
, puede haber muchas coincidencias como esta, como: 27 * 594 = 297 * 54
suponiendo que abcde representa 5 números diferentes del 1 al 9 (tenga en cuenta que son números diferentes y no contiene 0)
¿Cuántos tipos de fórmulas pueden satisfacer la forma: ab * cde = adb * ce?
Utilice las ventajas de las computadoras para encontrar todas las posibilidades y responder los tipos y números de diferentes cálculos.
Las fórmulas que satisfacen la ley conmutativa de la multiplicación se cuentan como tipos diferentes, por lo que la respuesta debe ser un número par.
Solución_1:
Solución de violencia directa
Organizar todas las a, b, c, d. E de 0 a 9
más las condiciones del filtro:
(1) a, b, c, d, e todas representan números diferentes (no iguales)
(2) satisfacen ab * cde = adb * ce tal fórmula (según el número de dígitos multiplicado por 10 elevado a n)
, el resultado de satisfacer las dos condiciones res + 1
Código_1:
res = 0
for a in range(1, 10):
for b in range(1, 10):
for c in range(1, 10):
for d in range(1, 10):
for e in range(1, 10):
if a != b and a != c and a != d and a != e and b != c and b != d and b != e and c != d and c != e \
and d != e and (a * 10 + b) * (c * 100 + d * 10 + e) == (a * 100 + d * 10 + b) * (
c * 10 + e):
res += 1
print(res)
Solución_2 (permutación completa):
use el módulo itertools para simplificar.
Primero use permutaciones para ordenar todos los elementos de 5 dígitos para ordenar todas las situaciones posibles
. Si ab * cde = adb * ce se satisface (de acuerdo con el número de dígitos multiplicado por 10 a la potencia)
Sea res + = 1
Código_2:
import itertools
res = 0
x = itertools.permutations([i for i in range(1, 10)], 5)
for j in x:
if (j[0] * 10 + j[1]) * (j[2] * 100 + j[3] * 10 +j [4]) == (j[0] * 100 + j[3] * 10 + j[1]) * (10 * j[2] + j[4]):
res += 1
print(res)
Respuesta:
142