Az alabbi feladat kodja kellene c++ ban, backtrackinget hasznalva. Valaki segit?

Figyelt kérdés
Generáljuk egy adott szám összes lehetséges felbontását, legalább két különböző, nem nulla természetes szám összegeként úgy, hogy az összegben szereplő számok növekvő sorrendben legyenek. Pl. Ha a szám 9, akkor a következő megoldásokat kapjuk: 1+2+6, 1+3+5, 1+8, 2+3+4, 2+7, 3+4, 4+5.

2020. okt. 4. 15:07
 1/1 anonymousreview60 ***** válasza:

1. Egy n számban az azt alkotó "egyesek" között (n-1) köz van. Ebből kell választanod 2 db helyet, amelyek lehetnek azonosak (ismétléses kombináció).

2. Kiválasztod az első számhoz az első határoló elemet. Majd későbbi ciklusban sorra a többit növekvő sorrendben.

3. Az előző ciklusba ágyazva kiválasztod a második számhoz a második határoló elemet. Először ugyanazt, mint az első, majd sorra a nála nagyobb sorszámúakat.

4. Meghatározod a számokat. Pl. ha az első határolóelem a 4., akkor az első szám a 4, ha az 5., akkor 5, stb.

5. Ha a kiválasztott 2. határolóelem ugyanaz, mint az első, akkor csak 2 elemű a felbontás: k, n-k.

6. Ha a kiválasztott 2. határolóelem eltér az elsőtől, akkor a számok: k, m-k, n-m.

7. A számokat sorrendbe teszed.

8. Az első ilyen szám halmazt eltárolod egy (n-1)^2 * 3 elemű tömb első sorába. Ha csak két szám van, nem három, akkor a 3. elem helyére "NULL" kerül.

9. Amikor a következő számkettest vagy számhármast megtaláltad, akkor azt összeveted az összes előzővel, és ha valamelyikkel egyezik, akkor elveted, számolod a következőt. Ha nem egyezik, akkor eltárolod a tömb legelső üres sorába.

2020. okt. 5. 06:50
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!