Ezt hogy kell megcsinálni?
Az a feladat hogy kap a függvényem egy N számot és ki kell írnom növekvő sorrendben 1-től N-ig az összes olyan számot aminek a szomszédos számjegyei között pontosan 1 a különbség.
Pl. ha N = 50-et kapok akkor ezt kell kiírnom:
1 2 3 4 5 6 7 8 9 10 12 21 23 32 34 43 45
N értéke maximum 10^9 lehet.
Úgy csináltam hogy egy ciklusban végigmegyek 1-től N-ig a számokon, stringgé alakítom, végigmegyek a számjegyeken és megnézem hogy 1-e a különbség az előzőhőz képest.
Ez kis számokra működik is de nagy N-re nagyon sokáig fut.
Hogy kéne rendesen megcsinálni?
"a szomszédos számjegyei között pontosan 1 a különbség"
Mármint legalább egy ilyen szomszédos pár van, vagy csak ilyen párok vannak benne? Pl. a 125 is ilyen, vagy csak a 123?
Lehet, hogy nem végigmenni kéne az összes számon és ellenőrizni, hogy megfelel-e a feltételnek, hanem konkrétan csak ezeket generálni sorban.
De még én is csak gondolkozom rajta..
(Egyébként az egyjegyűeket miért kell kiírni? Azt nem találom logikusnak.)
1-es "szomszédos számjegyei között pontosan 1 a különbség". 2 és 5 között nem 1 a különbség.
De gyengébbek kedvéért 100 és 200 között pl. ezek: 101 121 123
1000 és 1300 között: 1010 1012 1210 1212 1232 1234
Ez egy egyszeru BFS mintapelda (vagy DFS rendezessel).
Milyen nyelv? Ha delutanig nem segit mas, akkor osszedobok majd egy gyors megoldast.
veszed a szám utolsó számjegyét, beleteszed egy átmeneti változóba
leosztod a számot 10-zel és az egész részét összehasonlítod az átmeneti változóval
ha jó, akkor állítod az átmeneti változót az új értékre és mész tovább (osztás 100-zal)
csinálod amíg az adott szám kisebb mint amivel osztanál
Én szerintem csinálnék egy for ciklust, ami mindig annyival nő, amely helyiértéknél vagyunk.
A 10-eseknél 10-zel, viszont 100-asoknál már 100-zal.
És azonbelül pedig egy rekurzív függvény lenni.
A rekuzívfüggvényt meghívjuk a következő helyiértékre az előző helyiértéken álló számhoz képest +-1-gyel.
Tehát 100-nál a rekurzív függvényt 0-val és 2-vel hívjuk meg.
A 0-n belül 1 és -1, a -1 nyilván nem jó.
A 2-nél pedig 1 és 3.
Ha legkisebb helyiértéknél vagyunk, akkor vége. Így az eredmény 101, 121 és 123
Majd lépünk a legnagyobb helyiértékkel, és nézzük, hogy 200 belül mi van.
És így tovább.
Én valami ilyesmire gondoltam:
Persze ez így félkész.
De a 10-jegyűeket is kidobja egy pillanat alatt. :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!