Ahhoz, hogy mások kérdéseit és válaszait megtekinthesd, nem kell beregisztrálnod, azonban saját kérdés kiírásához ez szükséges!
Összes lehetőség számokat tartalmazó listából
Nayem{ Informatikus } kérdése
270
Adott egy "n" elemű számokat tartalmazó lista!
P.l.: ls = [0, 1, 2, 3]
A feladatom az lenne, hogy ezekből a számokból írjam fel az összes lehetőséget, így értve:
(ha bővülne a lista, akkor arra is megfelelően minden lehetőséget kiírjon)
0
0, 1
0, 2
0, 3
0, 1, 2
0, 1, 3
1
1, 2
1, 3
1, 2, 3
2
2, 3
3
Jelenleg 1 felhasználó nézi ezt a kérdést.
python
0
Felsőoktatás / Informatika
Válaszok
4
ifigazsi
megoldása
Hali!
Pythonban alapból van permutáció, kombináció csomag.
Lsd. melléklet. Vagy szépen végig írod a beágyazott for ciklusokat...
1
Nayem:
Nagyon szépen köszönöm! D Nem tudom van-e esetleg más (egyszerűbb/gyorsabb) megoldása a feladatnak, amihez ez kellett. Ezzel az volt a célom, hogy a 0, 1, ..., n sorozatból azokat a számokat jelenítse meg, aminek összegei egyenlőek n-el. Tehát pl ha az n = 5, akkor a lista [0, 1, 2, 3, 4, 5] legyen és ezekből adja vissza azokat a számkombinációkat, amiknek összege a megadott n, tehát 5.
1 éve0
Nayem:
Itt ugye a 2. ciklusba beágyazva ha a szám == n, akkor írja ki a szám változót és kész is. Nem tudom a feladatra van-e ennél gyorsabb megoldás, mert egy magasabb számnál pl 30-nál már elég sok idő 1 éve0
ifigazsi:
lsd. második verzió akkor
1 éve0
ifigazsi
válasza
Optimalizálni mindig lehet, mondjuk megírod C-ben.
(vagy szimplán Linuxon futtatod)
Csodát ne várj rengeteg számítás, nálam a 30-at fél mp alatt számolja ki, ami nem rossz eredmény.
Mondjuk segít, ha elsőre a feladatot írod le.
0
Még nem érkezett komment!
ifigazsi
válasza
Egy lassabb, átláthatatlanabb megoldás... de ciki, hogy elfeledkeztem Gauss bácsiról.
(és legalább nincs 10 sor)
0
Még nem érkezett komment!
ifigazsi
válasza
Igérem leállok.
Kávé csodát tett... kicsit hosszabb, de már sokkal gyorsabb. (bizonyos határesetekben pl. 36)
Elegánsabb lett volna:
if r * ((1 + r) / 2) == n:
print([x for x in range(1, r + 1)])
if r * ((1 + r) / 2) >= n:
break
Módosítva: 1 éve
0
Nayem:
Óó csak nyugodtan, bárcsak én is így tudnék programozni 1 éve0
ifigazsi:
őőőő... bárcsak tudnék programozni. Amúgy ez nem egy szép megoldás, főleg komment nélkül.
1 éve0
ifigazsi:
Milyen suli amúgy? Van valami sor/idő elvárás?
1 éve0