Hány 3-al osztható szám lehet a tömbben?
Olyan feladatot kaptam hogy van egy tömb pozitív egész számokkal és a következő műveletet hajthatom végre rajta:
Kiveszek két tetszőleges elemet a tömbből és az összegüket pedig beteszem a tömbbe.
Az a kérdés hogy a fenti művelet tetszőleges számú (0 is lehet) végrehajtása után maximum hány darab 3-al oszható szám lehet a tömbben.
Pl {1 2 3} a tömb akkor a megoldás 2 mert csinálhatok belőle {3 3}-at az 1 + 2 összeadásával.
Vagy {3 3 1 1 1 1}-nél 3 a megoldás mert először csinálhatok belőle {3 3 2 1 1}-et abból pedig {3 3 3 1}-et.
Azt találtam ki hogy végig megyek minden páron és ha az összegük 3-al osztható akkor növelem az eredményt a párt pedig beteszem egy setbe hogy többször ne használjam fel.
Itt a kódom: [link]
Ez pl az első példára jó megoldást ad de a másodikra már nem. Nem tudom hogy máshogy csináljam.
Nyomatékosan hangsúlyozva, hogy nem értek hozzá, és lehet, hogy egy tanult kolléga majd elküld érte a búsba:
Még nem néztem bele mélyebben, de gyanítom, hogy ennél összetettebb programra lesz szükség. Mivel az a cél, hogy minél több 3-mal osztható tömbelem legyen, szerintem az eleve oszthatókat alapból ki kellene venni, hiszen az összeadásuk csökkenti ezt a mennyiséget. Ennek megfelelően a többi szám esetén is törekedni kellene az összeadások számának csökkentésére, vagyis lehetőleg találni neki egy párt, amivel az oszthatóság teljesül. Végül a maradékból kéne minél kevesebb összeadással 3-mal osztható tömbelemeket készíteni, amíg lehet. Nekem egyelőre ez a végjáték tűnik a legkellemetlenebbnek, de a gyakorlatban kiderülhet, hogy nem is olyan ijesztő, csak én vagyok túl fáradt ahhoz, hogy átgondoljam.
Lehet, hogy a HashSet helyett én egyszerűen egy másik tömböt használnék a megtalált tömbelemek kigyűjtésére, az eredeti tömbben pedig nulláznám a helyüket, a végén pedig összeszámolnám a másik tömb nullánál nagyobb elemeit.
A hárommal oszthatóakat békén hagyod.
Megszámolod mennyi olyan van ami 1-et, és mennyi olyan van ami 2-t ad maradékul.
Ha ez egyforma, akkor minden egyes maradékoshoz adsz egy kettes maradékost.
Ha különbözik, akkor a kisebbik mennyiséggel megcsinálod az előző műveletet. A nagyobbik mennyiségű maradékos számok ha több mint hárman vannak akkor hármasával összeadod.
hárommal_oszthatóak_a_végin = eleve_hárommal_oszthatóak + min(egyesmaradékosak, kettesmaradékosak) + floor(abs(egyesmaradékosak-kettesmaradékosak)/3)
2-es ez nem jól működik de azért köszönöm a választ!
Egyesnek is.
Közben kaptam privátban jó megoldást.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!