Era una cálida tarde de verano ...
cuando mi estúpido auto decidió descomponerse en el medio de la carretera al regresar del supermercado. Lo empujé a un lado y decidí caminar a casa. Abrí el maletero para sacar la comida y las cosas restantes. Fue entonces cuando noté que los artículos no estaban empacados de manera uniforme. Algunas bolsas tenían artículos más pesados, mientras que otras tenían pocas cosas más livianas, algunas incluso tenían una mezcla de tales artículos. Para facilitarme el transporte, decidí agrupar todo en dos bolsas y hacer que sus pesos fueran lo más cercanos posible.
Tu meta
es para ayudarme a reorganizar los artículos en dos bolsas de compras de tal manera que la diferencia entre ambas bolsas sea lo más cercana posible a cero.
Matemáticamente:
PESO A LA IZQUIERDA - PESO A LA DERECHA ≈ 0
Ejemplo
Si solo tuviera 2 artículos, pan y mantequilla de maní, y el peso del pan es de 250 gramos y la mantequilla de maní es de 150 gramos, la mejor manera es llevarlos por separado en dos manos.
W LH - W RH = W (PAN) - W (P.BUTTER) 250-150
= 100
La otra posibilidad es:
W (PAN, MANTEQUILLA) - W (mano vacía) = (250 + 150) - 0 = 400
Esto no es mejor que nuestro primer caso, por lo que debe ir con el primero.
Su código debe
- tome entradas de números que indiquen el peso de los artículos en la bolsa de compras. Las unidades no son importantes, pero deberían ser las mismas (idealmente kilogramos o gramos). La entrada se puede hacer uno por uno o todos a la vez. Puede restringir el recuento total a 20 artículos como máximo, si lo desea.
- El formato / tipo de entrada depende de usted para elegir, pero no debe estar presente nada más que los pesos.
- Se permite cualquier idioma, pero se adhieren a las bibliotecas estándar.
- Salida de pantalla. Nuevamente, puedes elegir el formato, pero explica el formato en tu publicación. es decir, cómo podemos saber cuáles son los elementos de la mano izquierda y cuáles son los elementos de la mano derecha.
Puntos
- El código más corto gana.
Insinuación
Los dos algoritmos posibles en los que podría pensar son la diferenciación (más rápido) y las permutaciones / combinaciones (más lento). Puede usar estos o cualquier otro algoritmo que haga el trabajo.