Pregunta diaria de Blue Bridge Cup (5): cálculos descuidados (python)

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

Supongo que te gusta

Origin blog.csdn.net/weixin_50791900/article/details/112488461
Recomendado
Clasificación