9 votos

¿Cómo puedo crear una expresión que utilice los números 1 - 7 para igualar 100?

Siento publicar aquí lo que probablemente sea una pregunta muy pedestre (en realidad es de los deberes de mi hijo; tiene ocho años), pero nos está volviendo locos y realmente quiero saber cómo debo enfocarlo.

Necesitamos escribir una expresión que utilice los números 1, 2, 3, 4, 5, 6 y 7, en ese orden para dar una respuesta de 100. Podemos usar la multiplicación, la división, los operadores de suma y resta, y los paréntesis.

¿Hay alguna técnica en este caso o la fuerza bruta es el enfoque correcto? Soy un desarrollador de software y ni siquiera puedo averiguar cómo escribir un programa para resolver esto.

0 votos

¿Podría utilizar otros números también o sólo esos números?

0 votos

Digamos que sólo esos números.

0 votos

Para escribir un programa de este tipo, basta con hacer todas las cadenas legales y evaluarlas hasta encontrar la respuesta correcta. Como dice Did, sólo hay que buscar. Tampoco conozco ninguna técnica general.

16voto

Mark Puntos 290

A partir de un programa de fuerza bruta en Python, esta es la lista de posibles soluciones. Me disculpo por los "duplicados matemáticos" causados por la inclusión de paréntesis, pero la lista era demasiado larga para el control de calidad.

+1.0-2.0+3.0+(4.0*5.0-6.0)*7.0
+1.0-2.0+3.0+(4.0*(5.0)-6.0)*7.0
+1.0-2.0*3.0+(4.0+5.0+6.0)*7.0
+1.0-2.0*3.0+(4.0+(5.0)+6.0)*7.0
+1.0+(2.0+3.0)*4.0*5.0+6.0-7.0
+1.0+(2.0+3.0)*4.0*5.0+(6.0)-7.0
+1.0+(2.0+3.0)*4.0*(5.0)+6.0-7.0
+1.0-(2.0)+3.0+(4.0*5.0-6.0)*7.0
+1.0-(2.0)+3.0+(4.0*(5.0)-6.0)*7.0
+1.0-(2.0)*3.0+(4.0+5.0+6.0)*7.0
+1.0-(2.0)*3.0+(4.0+(5.0)+6.0)*7.0
-1.0+2.0*3.0*4.0+(5.0+6.0)*7.0
-1.0+2.0*(3.0*4.0*5.0-6.0)-7.0
-1.0+2.0*(3.0*4.0*(5.0)-6.0)-7.0
-1.0+2.0*(3.0*(4.0*5.0)-6.0)-7.0
-1.0+2.0*(3.0*(4.0)*5.0-6.0)-7.0
-1.0+2.0*(3.0)*4.0+(5.0+6.0)*7.0
-1.0*2.0+3.0*4.0*5.0+6.0*7.0
-1.0*2.0+3.0*4.0*5.0+(6.0)*7.0
-1.0*2.0+3.0*4.0*(5.0)+6.0*7.0
-1.0*2.0+3.0*(4.0*5.0)+6.0*7.0
-1.0*2.0+3.0*(4.0)*5.0+6.0*7.0
-1.0*2.0+3.0*(4.0)*5.0+(6.0)*7.0
-1.0*2.0-3.0+(4.0+5.0+6.0)*7.0
-1.0*2.0-3.0+(4.0+(5.0)+6.0)*7.0
-1.0*2.0+(3.0*4.0*5.0)+6.0*7.0
-1.0*2.0+(3.0*4.0)*5.0+6.0*7.0
-1.0*2.0+(3.0*4.0)*5.0+(6.0)*7.0
-1.0*2.0+(3.0*(4.0)*5.0)+6.0*7.0
-1.0*2.0+(3.0)*4.0*5.0+6.0*7.0
-1.0*2.0+(3.0)*4.0*5.0+(6.0)*7.0
-1.0*2.0+(3.0)*4.0*(5.0)+6.0*7.0
-1.0+(2.0+3.0)*4.0*5.0-6.0+7.0
-1.0+(2.0+3.0)*4.0*5.0-(6.0)+7.0
-1.0+(2.0+3.0)*4.0*(5.0)-6.0+7.0
-1.0+(2.0*3.0)*4.0+(5.0+6.0)*7.0
-1.0+(2.0)*3.0*4.0+(5.0+6.0)*7.0
-1.0*(2.0-3.0*4.0*5.0)+6.0*7.0
-1.0*(2.0-3.0*(4.0)*5.0)+6.0*7.0
-1.0*(2.0-(3.0*4.0)*5.0)+6.0*7.0
-1.0*(2.0-(3.0)*4.0*5.0)+6.0*7.0
-1.0*(2.0)+3.0*4.0*5.0+6.0*7.0
-1.0*(2.0)+3.0*4.0*5.0+(6.0)*7.0
-1.0*(2.0)+3.0*4.0*(5.0)+6.0*7.0
-1.0*(2.0)+3.0*(4.0*5.0)+6.0*7.0
-1.0*(2.0)+3.0*(4.0)*5.0+6.0*7.0
-1.0*(2.0)+3.0*(4.0)*5.0+(6.0)*7.0
-1.0*(2.0)-3.0+(4.0+5.0+6.0)*7.0
-1.0*(2.0)-3.0+(4.0+(5.0)+6.0)*7.0
(1.0-2.0)+3.0+(4.0*5.0-6.0)*7.0
(1.0-2.0)+3.0+(4.0*(5.0)-6.0)*7.0
(1.0+(2.0+3.0)*4.0*5.0+6.0)-7.0
(1.0+(2.0+3.0)*4.0*5.0)+6.0-7.0
(1.0+(2.0+3.0)*4.0*(5.0)+6.0)-7.0
(1.0)-2.0+3.0+(4.0*5.0-6.0)*7.0
(1.0)-2.0+3.0+(4.0*(5.0)-6.0)*7.0
(1.0)-2.0*3.0+(4.0+5.0+6.0)*7.0
(1.0)-2.0*3.0+(4.0+(5.0)+6.0)*7.0
+(1.0-2.0)+3.0+(4.0*5.0-6.0)*7.0
+(1.0-2.0)+3.0+(4.0*(5.0)-6.0)*7.0
+(1.0+(2.0+3.0)*4.0*5.0+6.0)-7.0
+(1.0+(2.0+3.0)*4.0*5.0)+6.0-7.0
+(1.0+(2.0+3.0)*4.0*(5.0)+6.0)-7.0
+(1.0)-2.0+3.0+(4.0*5.0-6.0)*7.0
+(1.0)-2.0+3.0+(4.0*(5.0)-6.0)*7.0
+(1.0)-2.0*3.0+(4.0+5.0+6.0)*7.0
+(1.0)-2.0*3.0+(4.0+(5.0)+6.0)*7.0
-(1.0*2.0-3.0*4.0*5.0)+6.0*7.0
-(1.0*2.0-3.0*(4.0)*5.0)+6.0*7.0
-(1.0*2.0-(3.0*4.0)*5.0)+6.0*7.0
-(1.0*2.0-(3.0)*4.0*5.0)+6.0*7.0
-(1.0*2.0)+3.0*4.0*5.0+6.0*7.0
-(1.0*2.0)+3.0*4.0*5.0+(6.0)*7.0
-(1.0*2.0)+3.0*4.0*(5.0)+6.0*7.0
-(1.0*2.0)+3.0*(4.0*5.0)+6.0*7.0
-(1.0*2.0)+3.0*(4.0)*5.0+6.0*7.0
-(1.0*2.0)+3.0*(4.0)*5.0+(6.0)*7.0
-(1.0*2.0)-3.0+(4.0+5.0+6.0)*7.0
-(1.0*2.0)-3.0+(4.0+(5.0)+6.0)*7.0
-(1.0-(2.0+3.0)*4.0*5.0+6.0)+7.0
-(1.0-(2.0+3.0)*4.0*5.0)-6.0+7.0
-(1.0-(2.0+3.0)*4.0*(5.0)+6.0)+7.0
-(1.0*(2.0)-3.0*4.0*5.0)+6.0*7.0
-(1.0*(2.0)-3.0*(4.0)*5.0)+6.0*7.0
-(1.0)+2.0*3.0*4.0+(5.0+6.0)*7.0
-(1.0)+2.0*(3.0*4.0*5.0-6.0)-7.0
-(1.0)+2.0*(3.0*4.0*(5.0)-6.0)-7.0
-(1.0)+2.0*(3.0*(4.0*5.0)-6.0)-7.0
-(1.0)+2.0*(3.0*(4.0)*5.0-6.0)-7.0
-(1.0)+2.0*(3.0)*4.0+(5.0+6.0)*7.0
-(1.0)*2.0+3.0*4.0*5.0+6.0*7.0
-(1.0)*2.0+3.0*4.0*5.0+(6.0)*7.0
-(1.0)*2.0+3.0*4.0*(5.0)+6.0*7.0
-(1.0)*2.0+3.0*(4.0*5.0)+6.0*7.0
-(1.0)*2.0+3.0*(4.0)*5.0+6.0*7.0
-(1.0)*2.0+3.0*(4.0)*5.0+(6.0)*7.0
-(1.0)*2.0-3.0+(4.0+5.0+6.0)*7.0
-(1.0)*2.0-3.0+(4.0+(5.0)+6.0)*7.0
-(1.0)*2.0+(3.0*4.0*5.0)+6.0*7.0
-(1.0)*2.0+(3.0*4.0)*5.0+6.0*7.0
-(1.0)*2.0+(3.0*4.0)*5.0+(6.0)*7.0
-(1.0)*2.0+(3.0*(4.0)*5.0)+6.0*7.0
-(1.0)*2.0+(3.0)*4.0*5.0+6.0*7.0
-(1.0)*2.0+(3.0)*4.0*5.0+(6.0)*7.0
-(1.0)*2.0+(3.0)*4.0*(5.0)+6.0*7.0

Código utilizado para generar la lista:

import itertools

signs = ('+','-','/','*','(',')','+(','-(','/(','*(',')+',')-',')/',')*')
nums = range(1,8)

for someSigns in itertools.product(signs,repeat=7):
    evalStr = ""
    for i, j in zip(someSigns, nums):
        evalStr += i + str(float(j))
    try:    
        if eval(evalStr) == 100:    
            print evalStr
    except:
        continue

0 votos

Genial - ¡gracias, Mark!

12voto

Did Puntos 1

$$-1\cdot2+3\cdot4\cdot5+6\cdot7$$ Que yo sepa, no existe un método general.

0 votos

Muchas gracias. Estoy ligeramente confundido por la notación. Creo que lo escribiría como -(1*2)+(3*4*5)+(6*7). ¿Por qué el carácter inusual para la multiplicación, y por qué no son necesarios los paréntesis? Pido disculpas de nuevo por la pregunta tan básica, ya que nunca he estudiado matemáticas formales.

2 votos

Normalmente se considera que las multiplicaciones y las divisiones se realizan antes que las sumas y las restas, de ahí que efectivamente interpretes correctamente la fórmula. El símbolo de la multiplicación puede ser de forma equivalente $\cdot$ o $\times$ o incluso $\ast$ .

0 votos

Brillante. ¡Muchas gracias!

7voto

Argon Puntos 12328

De otra manera:

$$-1\cdot 2-3+(4+5+6)\cdot 7$$

0 votos

Su respuesta es cuestionable en cierto modo. La notación correcta es $a(b + c)$ en lugar de $(b + c)a$ para evitar confusiones. Aun así, tiene mi upvote :-)

0 votos

@enzotib: El post está bien ahora.

0 votos

¡Muchas gracias, Argon! Gracias también por corregir mis etiquetas :-)

5voto

debitanostra Puntos 227

Intentemos algo más sencillo.

El primer paso es hacerse una idea de las cosas. ¿Qué ocurre si sumamos todos los números 1+2+...+7? Obtenemos 28, que es demasiado pequeño. ¿Cómo podemos obtener un número mayor? Si restamos o dividimos, lo haremos más pequeño. Así que tenemos que multiplicar. Lo necesitamos unas 4 veces más grande (3 x 28 = 84, 4 x 28 = 112). Bueno, eso es un poco engañoso porque el 4 no se multiplica a sí mismo, es más bien 4*24. Pero sigamos y probemos con el 4.

Hay dos formas obvias de obtener la multiplicación por 4. La primera es (1+2+3) 4+5+6+7=42 - demasiado pequeño. [La otra es (1+2+3)+4 (5+6+7) = 78. Sigue siendo demasiado pequeño. Así que esto es un poco más complicado de lo que parece.

Si pasamos a 5*(6+7) será demasiado grande.

Pausa. 6*7=42. Y (3*4*5)=60. Así que eso nos acercaría. A 102 de hecho. ¿Podríamos obtener el -2 del 1,2,3? Eso te lo dejo a ti.

Pero puedes seguir quejándote de que he sacado 6*7 y 3*4*5 de la nada. Bueno, no del todo. Mi proceso de pensamiento fue el siguiente:

Necesito algo más grande. 6*7=42. Oh, pero entonces 3*4*5=60.

No parece una progresión especialmente lógica. No es lógica, pero es natural. 6,7 simplemente grita 42. Eso está grabado en mi cerebro. 3,4,5 ciertamente susurra 60, tal vez incluso lo habla.

Para mí hay dos lecciones de esto. (1) hay que aprender las cosas de memoria. No es posible progresar hasta que tu cerebro esté repleto de datos útiles. Tienen que estar en tu cerebro. Porque necesitas una recuperación muy rápida. Si tienes que andar calculando 6*7=42, es mucho más difícil. (2) Necesitas jugar de forma organizada. Los mejores libros sobre este tema son, con diferencia, los antiguos de Polya. Un niño de 8 años probablemente podría arreglárselas con su libro corto.

2voto

Patrick Lemaire Puntos 11

La respuesta a esta pregunta es la siguiente: 1+2+34+56+7=100. Ya hemos utilizado todos los números necesarios para que sean iguales a 100.

0 votos

¡esto es un poco brillante, pero me gustaría saber si esto está dentro de las reglas!

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X