sutee84A négy szám adott - 840,1040,1140,1340. Legyen a, b, c, d az a keresett négy ismeretlen szorzó, amivel meg kell ezeket szorozni, hogy megkapd a felbontandó számot. A te példáddal élve:
8780 = 0*870 + 0*1040 + 3*1140 + 4*1340,
vagyis a=0, b=0, c=3, d=4. Első ötletem az, hogy nézd meg a négy számra egyesével, hogy hányszor vannak meg a felbontandó számba. Pl. 870 megvan 10-szer, 1040 megvan 8-szor.. stb.. Ez alapján próbálgasd végig az összes lehetséges a, b, c és d értéket, úgy, hogy mindegyiket egy for ciklussal végigjárod. Ha sikerül találni olyan a, b, c és d számokat amivel a fenti egyenlet teljesül, akkor megvan a keresett megoldás, különben nem lehet felbontani. Valami ilyesmire gondolok:
function felbont(a1, b1, c1, d1, x){
for i=0-tól x \ a1-ig # a \ jel az egészosztás, ez egy egész számot ad eredményül
for j=0-tól x \ b1-ig
for k=0-tól x \ c1-ig
for l=0-tól x \ d1-ig
ha i*a1 + j*b1 + k*c1 + l*d1 = x
return i, j, k, l
ha vége
for vége
for vége
for vége
for vége
return semmi
function vége
Ha a fv. semmivel tér vissza akkor nem lehet felbontani x-et, ha visszaad 4 számot, akkor az a megoldás.
Lehet, hogy nem jó így, és biztos, hogy nem ez a legoptimálisabb megoldás, de mivel csak 4 számról van szó ezért szerintem ez így működni fog.