Hogyan lehet a konzolra kiíratni az alábbi mintát?
//\\//\\//\\
\//\\//\\//\
\\//\\//\\//
/\\//\\//\\/
\\//\\//\\//
Ezt.
Akármekkora méret esetén működjön és akár 3 vagy 4 pálcikával is, tehát nem feltétlen csak 2 pálcikánként tudjon váltani.
Ez C++ dolog?
Mert nem C++-t tanulok, csak a fenti kód attól még (ilyen szempontból) nem okozott gondot.
Mint mondtam, ha mindenképp valamilyen containerbe akarod rakni a mintát, akkor sem változik sok minden, a mintát ugyanúgy generálnád ki, csak a kiíratás helyett behelyezed a tárolóba (mezei tömb helyett célszerűbb valami okosabb tárolót használni, aminek van push/append metódusa).
Amúgy az algoritmus amit írtam első ránézésre komplikáltnak tűnhet, de igazából néhány egyszerű észrevételből van kikövetkeztetve:
1. Minden pálcika K alkalommal ismétlődik, aztán vált, ez a sorminta
2. Minden sorminta eggyel 'hátrébbról' indul, mint a felette levő (feltételeztem, hogy az utolsó sor hibásan lett leírva, mert nem nagyon illik bele a mintába)
Mivel mindkét pálcika K alkalommal ismétlődik, ezért egy teljes ciklus 2*K pálcikából áll. Létrehozok tehát egy kezdőindexet, ami kezdetben 0.
Minden sorban létrehoztok egy belső indexet, ami az aktuális kezdőindextől indul, és aszerint íratok ki / vagy \ pálcikát, hogy az aktuális belső index kisebb, vagy nagyobb-e K-nál. A belső indexet minden pálcika után növelem 1-el modulo 2*K. És minden sor végén csökkentem a start indexet 1-el (2*K-1, ha 0 alá menne), mivel a következő sor 1-el hátrébbról indul.
Ezt amúgy számos másik módon is megoldhatod, például egy nagyon egyszerű megoldás még, ha létrehozol egy ciklikus láncolt listát, amibe eltárolsz egy teljes ciklust (2 pálcika esetén pl {/,/,\,\}), és eltárolsz egy kezdőpontot, ahonnan az adott sorminta indul, és ezen mész körbe-körbe M lépésnyit (ami a sor hossza), a kezdőpontot meg minden sornál 1-el hátrébb mozgatod.
Ha meg nem akarsz ciklikus listával vesződni, akkor ugyanez megoldható tömbbel is, csak picit körülményesebb, mert magadnak kell lekezelni a ciklikusságot.
Kétdimenziós char array-be sikerült belepakolni elsőre. :)
Én is lerajzoltam először a mintát egy lapra, megszámozgattam, végiggondoltam - mégis egy 7 for ciklust tartalmazó értelmetlen dolog jött ki.
Köszönöm, még párszor végiggondolom majd!
Jó lenne megérteni.
Ma kitaláltam, hogy szeretnék sakktábla-mintát is (duplán, tehát egy négyzet 2*2 karakter).
A jó hír az, hogy pár másodperc alatt rájöttem, mi az az egyetlen dolog, amit át kell írni ehhez az általad mutatott kódban. A rossz hír pedig az, hogy ennek ellenére még mindig nem teljesen értem. :D :D
Jártas vagy a C#-ban? Ha igen, van időd ránézni erre? :)
https://pastebin (pont) com/DtSyuMjR
A 2-szer 2-es mintához csak 1-2 dolgot kellett átírnom, de ha azt akarom, hogy 4 X 4 -esen, 3 x 3-ason stb működjön... belebonyolódtam.
Más irányból közelítettem meg.
Kérlek, ne bánts! :) Biztos szörnyű megoldás. Tudom, hogy van még mit tanulnom.
Illetve itt van a tegnapihoz hasonló megoldás, tömbbel, itt az a probléma, hogy ahol a nem üres mintával kezd, ott a második sortól kezdődően eggyel beljebb kerül; más hiba nincs, csak ez, elsőre ki se szúrtam:
https://pastebin (pont) com/VyZV34bL
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!