El taller "La Precisa" fabrica estatuas mediante volcado de material fundido en moldes. Por eso todas las estatuas del mismo molde tienen exactamente el mismo peso. Como la balanza está graduada en gramos, el peso medido en gramos es un número entero.
Armaron tres pedidos, para decorar castillos: el primero con 12 gárgolas y 15 leones, el segundo con 17 gárgolas y 13 leones y el tercero con 20 gárgolas y 4 leones. Las tres cajas donde guardaron cada pedido tenían el mismo peso también, que era una cantidad entera de gramos (¡misma balanza!).
Al llegar el envío al centro de distribución descubrieron que las etiquetas eran ilegibles, así que debían identificar cada caja sin abrirla, sabiendo solamente los pesos. Una de las cajas pesaba 7622g, otra 6971g y la otra 6008g.
Determinar cuánto pesaba cada tipo de estatua y cuál pedido estaba en cada caja. ¿Hay una sola posibilidad?
Bueno lo que queda es un sistema de ecuaciones con tres incógnitas, 12*x+15*y+z = ?; 17*x+13*y+z = ?; 20*z+4*y+z = ?. Pero cualquier ecuación puede dar uno de los tres resultados : 7622, 6971, 6008. Tranquilamente se puede hacer a mano, sería resolver 6 veces el sistema permutando los resultados. Pero bueno éste es el código del programa que escribí para resolverlo:
#include <stdio.h> #define paquete1 7622 #define paquete2 6971 #define paquete3 6008 void imprimir(int a,int b,int c){ printf("Gargolas: %d\nLeones: %d\nCajas: %d\n",a,b,c); } main(){ int pcaja, pgar, pleo, i, n, x, resultado1, resultado2, resultado3; for (i = 1; i <= 1000; i++){ for (n = 1; n <= 1000; n++){ for (x = 1; x <= 1000; x++){ pgar = i; pleo = n; pcaja = x; resultado1 = ((12*pgar) + (15*pleo) + pcaja); resultado2 = ((17*pgar) + (13*pleo) + pcaja); resultado3 = ((20*pgar) + (4*pleo) + pcaja); switch(resultado1){ case paquete1: switch(resultado2){ case paquete2: if (resultado3 == paquete3){ imprimir(pgar,pleo,pcaja); printf("Paquete 1 = 12 gárgolas, 15 leones\nPaquete2 = 17gárgolas, 13 leones\nPaquete 3 = 20 gárgolas, 4 leones\n"); } break; case paquete3: if (resultado3 == paquete2){ imprimir(pgar,pleo,pcaja); printf("Paquete 1 = 12 gárgolas, 15 leones\nPaquete2 =20 gárgolas, 4 leones\nPaquete 3 = 17 gárgolas, 13 leones\n");} break; } case paquete2: switch(resultado2){ case paquete1: if (resultado3 == paquete3){ imprimir(pgar,pleo,pcaja); printf("Paquete 1 = 17 gárgolas, 13 leones\nPaquete 2 = 12 gárgolas, 15 leones\nPaquete 3 = 20 gárgolas, 4 leones\n");} break; case paquete3: if (resultado3 == paquete1){ imprimir(pgar,pleo,pcaja); printf("Paquete 1 = 20 gárgolas, 4 leones\nPaquete 2 = 12 gárgolas, 15 leonesi\nPaquete 3 = 17 gárgolas, 13 leones\n");} break; } case paquete3: switch(resultado2){ case paquete1: if (resultado3 == paquete2){ imprimir(pgar,pleo,pcaja); printf("Paquete 1 = 17 gárgolas, 13 leones\nPaquete 2 = 20 gárgolas, 4 leones\nPaquete 3 = 12 gárgolas, 15 leones\n");} break; case paquete2: if (resultado3 == paquete1){ imprimir(pgar,pleo,pcaja); printf("Paquete 1 = 20 gárgolas, 4 leones\nPaquete 2 = 17 gárgolas, 13 leones\nPaquete 3 = 12 gárgolas, 4 leones\n");} break; } } } } } }
El único resultado que me tira es:
Gargolas: 233
Leones: 257
Cajas: 320
Paquete 1 = 17 gárgolas, 13 leones
Paquete 2 = 12 gárgolas, 15 leones
Paquete 3 = 20 gárgolas, 4 leones
Y no creo que haya más soluciones ya que si el bucle continúa, y cada vez son mayores números asignados a las variables, mayor van a ser los resultados y sobrepasarán los posibles pesos de los paquetes.