Sıcak bir yaz gecesiydi ...
aptal arabam yolumun ortasında süpermarketten dönerken yolun ortasında parçalanmaya karar verdiğinde. Onu kenara itmiştim ve eve yürümeye karar verdim. Alışverişe çıkmak ve kalan şeyleri almak için bagajı açtım. Öyleyse öğelerin eşit şekilde torbalanmadığını fark ettim. Bazı çantalarda daha ağır malzemeler varken, diğerlerinde daha az hafif eşyalar vardı, hatta bazılarında bu tür eşyalar bile vardı. Taşınmamı kolaylaştırmak için her şeyi iki çantaya ayırmaya ve ağırlıklarını birbirine mümkün olduğunca yaklaştırmaya karar verdim.
Senin hedefin
her iki çanta arasındaki farkın sıfıra yakın olacağı şekilde, ürünleri iki alışveriş torbasına yeniden düzenlememe yardım etmektir.
Matematiksel olarak:
AĞIRLIK SOL EL - AĞIRLIK SAĞLI EL ≈ 0
Örnek
Sadece 2 öğem olsaydı, Ekmek ve Fıstık ezmesi ve ekmeğin ağırlığı 250 gram, yerfıstığı yağı 150 gram ise, en iyi yol onları iki elimizde ayrı taşımaktır.
W LH - W RH W = (EKMEK) - W (P.BUTTER)
250-150 = 100
Diğer olasılık ise:
W (EKMEK, P.BUTTER) - W (boş el) = (250 + 150) - 0 = 400
Bu bizim ilk davamızdan daha iyi değil, o yüzden birincisine gitmelisin.
Kodunuz
- Alışveriş çantasındaki eşyaların ağırlığını belirten sayıların girişini yapın. Birimler önemli değildir, ancak aynı olmalıdırlar (ideal olarak kilogram veya gram). Giriş, bir kerede bir veya bir defada yapılabilir. İsterseniz toplam sayımı maksimum 20 madde ile sınırlayabilirsiniz.
- Girdi biçimini / türünü seçmek size kalmış, ancak ağırlıklardan başka hiçbir şey bulunmamalıdır.
- Her dile izin verilir, ancak standart kitaplıklara sadık kalın.
- Görüntü çıkışı. Yine, formatı seçmekte özgürsünüz, ancak yazınızdaki formatı açıklayın. yani hangilerinin sol el, hangilerinin sağ el olduğunu nasıl söyleyebiliriz.
makas
- En kısa kod kazanır.
İpucu
Aklıma gelen iki algoritma farklılaşma (daha hızlı) ve permütasyonlar / kombinasyonlar (daha yavaş). Bunları veya işi yapan başka bir algoritmayı kullanabilirsiniz.