Kezdőoldal » Számítástechnika » Programozás » Hogyan kezdjek bele? (tömb...

Hogyan kezdjek bele? (tömb C-ben, többi lent)

Figyelt kérdés

Adott egy olyan tömb, amiben a tagok egy ismétlődő mintát követnek. A programnak meg kellene határoznia ezt a mintát, és ezután kiszámítania, hogy mely értékkel

folytatódna a tömb.


(pl. 2 2 2 9 9 2 9 9 2 2 2 9 9 2 ? ) (itt nyilván 9-nek kéne következnie, de ezt a programnak kell visszaadnia, ő csak annyit kap, hogy 2 2 2 9 9 2 9 9 2 2 2 9 9 2 -1 (a -1 zárja a sort)


Elméletileg csak egész, pozitív számok lehetnek a tömbben és a program mindig eleget kap ahhoz, hogy megállapíthassa az ismétlődést és így a következő tagot.



2018. okt. 11. 12:23
1 2
 1/14 anonim ***** válasza:
0%
Ha el sem tudod kezdeni, akkor rossz tanfolyamon / egyetemi képzésen vagy.
2018. okt. 11. 12:31
Hasznos számodra ez a válasz?
 2/14 anonim ***** válasza:
30%
int main {
2018. okt. 11. 12:32
Hasznos számodra ez a válasz?
 3/14 A kérdező kommentje:

1.-nek: nem a kérdésre válaszoltál

2.-nak: nem így gondoltam, hanem elméletben --> hogyan ismeri fel a program az ismétlődést? (ami lehet akár 2 tagú (pl, 1 2 1 2 1 2 1 2....) vagy 10 tagú is (pl 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10)

2018. okt. 11. 12:39
 4/14 Ozmium42 ***** válasza:

Hacsak a program nem tudja előre, hogy miféle mintázatokat kell felismernie, akkor úgy nehéz lesz. Elvi alapok itt, bár gondolom nem erre vagy kíváncsi:


[link]


A másik lehetőség, hogy egyszerűen leprogramozol minden lehetséges mintázatot egyenként, amire a program számíthat, és meg fogja majd próbálni ráilleszteni az adatsorra.

2018. okt. 11. 13:17
Hasznos számodra ez a válasz?
 5/14 anonim ***** válasza:

Szükséged lesz egy dinamikus tömbre melyben tárolod az elemek előfordulásának számát -szóval a topiknyitó példánál maradva a tartalma az alábbi lesz: [[2,3],[9,2],[2,1],[9,2],[2,3],[9,2],[2,1]].


Első lépésként a már meglevő tömbön végigmenve kell feltöltened: ha az új dinamikus tömb legutolsó elemének 0. tagja megegyezik a már meglevő tömbben éppen aktuálisan vizsgált számmal, akkor az új dinamikus tömb utolsó elemének első tagját meg kell növelni eggyel, különben egy új két elemű tömböt kell felvenni, melynek 0. eleme az éppen vizsgált szám, első eleme pedig 1.


Ha már végigmentél a már meglevő tömbön, fogod az új tömb két utolsó elemét és megkeresed benne.Ha megvan, az azokat követő tag határozza meg a folytatódást.

2018. okt. 11. 13:34
Hasznos számodra ez a válasz?
 6/14 anonim ***** válasza:

Nem kell ide plusz tömb. Végigmész a tömb elemein, csinálsz egy külön csúsztatás változót, ami addig növekszik, amíg annyira nem tudod elcsúsztatni a tömbödet, amíg egyezik a tömb elemeivel.


pl a sorozatod:

1 2 5 6 1 2 5 6 1 2 5 6


Csúsztatás 1:

1 2 5 6 1 2 5 6 1 2 5 6

- 1

Csúsztatás 2:

1 2 5 6 1 2 5 6 1 2 5 6

- - 1

Csúsztatás 3:

1 2 5 6 1 2 5 6 1 2 5 6

- - - 1

Csúsztatás 4:

1 2 5 6 1 2 5 6 1 2 5 6

- - - - 1 2 5 6 1 2 5 6


Tehát az első 4 elem az ismétlődés

2018. okt. 11. 15:53
Hasznos számodra ez a válasz?
 7/14 anonim ***** válasza:

Előző kérdésednél én voltam.

Ez már jóval nehezebb mint az előző.

Amit az előttem szóló írt úgy lehet.

Az a dinamikus tömbös megoldás meg nem működne ha csak egy darab ismétlődő tag van.

pl: 1, 2, 5, 6, 1


A hosszt érdemes letárolni, mert sokat kell vele dolgozni és rá hivatkozni a cikluson belül.

Vigyázni kell, hogy ne indexeld túl a tömböt. Itt kell egymásba ágyazott ciklus, meg érdemes a modulo operátort is használni itt.

2018. okt. 11. 22:43
Hasznos számodra ez a válasz?
 8/14 anonim ***** válasza:

#6: Vegyük például az alábbi esetet:

1 2 3 1 2 3 4 1 2 3

ugye a következő az 1 2 3 4 lenne


Csúsztatás 1:

1 2 3 1 2 3 4 1 2 3

- 1


Csúsztatás 2:

1 2 3 1 2 3 4 1 2 3

- - 1


Csúsztatás 3:

1 2 3 1 2 3 4 1 2 3

- - - 1

tehát az elv szerint 1 2 3 lenne a következő - pedig valójában 1 2 3 4


De vegyük a topiknyitó sorozatot:

2 2 2 9 9 2 9 9 2 2 2 9 9 2

ugye a következő a 9 9 lenne


Csúsztatás 1:

2 2 2 9 9 2 9 9 2 2 2 9 9 2

- 2

tehát az elv szerint 2 lenne a következő - pedig valójában 9 9.

2018. okt. 11. 23:51
Hasznos számodra ez a válasz?
 9/14 anonim ***** válasza:

Én írtam a csúsztatásos dolgot.

Az algoritmus teljesen jól működik, ugyanis nem az első ismétlődő karakterig kell menni a csúsztatások után, hanem végig - szóval ha 1 karakter nem egyezik meg a csúsztatás után, akkor csúsztatás +1, viszont ha végig tud menni a ciklus az egész tömbön, akkor meg van a séma.

2018. okt. 12. 10:28
Hasznos számodra ez a válasz?
 10/14 anonim ***** válasza:

Előző napi 22:43-es hozzászóló vagyok.

A végigmenéssel csak óvatosan, véletlenül se legyen túlindexelés, mivel el van csúsztatva egymáshoz a két indexelés. Én is úgy értettem, hogy nem csak a legelsővel hasonlítja össze, de az butaság is lenne.

Ha már elkezdtem még hamarabb mint ahogy hozzászólt az előttem lévő, hogy miért jó, csak nem értem rá vele foglalkozni utána, akkor már be is fejezem : [link]

Így halad végig a csúsztatás, kékkel dőlten aláhúzott számokkal jelölve a számunkra fontos egyezőséget. Ha a felső tömbben a végéig ér a kék, akkor a kékkel jelölt után lesz az alsóban a keresett elem. Igazából tudjuk hogy nem két tömb a kettő hanem egy és ugyanaz. A moduló amit írtam az meg még se kell, mert ezzel a megoldással egyszerűbb.

2018. okt. 12. 11:26
Hasznos számodra ez a válasz?
1 2

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!