Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 628. feladat (2024. május)

I. 628. Egy \(\displaystyle N\times M\) képpontból álló terület képpontjainak módosítását megoldhatjuk úgy, hogy egyszerűen felülről lefelé soronként, egy soron belül balról jobbra haladunk, és egymás után beállítjuk a képpontok értékét. A képpontok módosításának sorrendje lehet más is. Egy videómegjelenítő a területek képpontjainak módosításakor lólépésben halad az alábbi algoritmus szerint:

  1. A bal felső sarokban lévő képpontól indul.
  2. Amennyiben az aktuális képpontból sikerül lólépésben egy még nem módosított képpontot találnia, akkor odalép, megváltoztatja, majd folytatja a műveletsort ebből a képpontból. Az adott helyről lólépéssel elérhető képpontokat az óramutató járásával egyező irányban vesszük sorra (lásd a mintát).
  3. Amennyiben az aktuális helyről nem érhető el lólépésben egyetlen, még nem módosított képpont sem, akkor az aktuális helyről kiindulva balról jobbra, illetve soronként fentről lefelé haladva megkeresi az első, még nem módosított képpontot, azt módosítja, majd folytatja a műveletsort a 2. lépés szerint. Ha keresés közben a terület utolsó sorának utolsó képpontja sem megfelelő, akkor az első sor második képpontjával folytatja a keresést.

Készítsünk programot i628 néven, amely \(\displaystyle N\) sor és \(\displaystyle M\) oszlop esetén megadja a terület pixeleinek módosítási sorrendjét az alábbi minta szerint.

A program a standard bemenet első sorából olvassa be \(\displaystyle N\) és \(\displaystyle M\) értékét (\(\displaystyle 2\le N\), \(\displaystyle M\le 50\)), és a standard kimenet \(\displaystyle N\) sorába írja ki, hogy az adott sorban lévő képpontok a módosítás sorrendjében hányadik lépésnél kerülnek sorra. Egy soron belül M oszlopban jelenítsük meg a sorrendet jelző számokat a minta szerint szóközökkel elválasztva úgy, hogy minden kiírt szám azonos számú karakterhelyet foglaljon el.

Példa:

BemenetKimenet
7 13
  1 28 83 86  3 30 67 60  5 32 39 22  7
 84 87  2 29 66 59  4 31 38 47  6 13 24
 91 82 85 78 73 68 61 48 33 40 23  8 21
 88 77 72 65 58 53 44 37 46 49 12 25 14
 81 89 79 74 69 62 55 52 41 34 17 20  9
 76 71 64 57 54 43 36 45 50 11 26 15 18
 90 80 75 70 63 56 51 42 35 16 19 10 27

Beküldendő egy tömörített i628.zip állományban a program forráskódja és rövid dokumentációja, amely megadja, hogy a forrásállomány melyik fejlesztői környezetben fordítható.

(10 pont)

A beküldési határidő 2024. június 17-én LEJÁRT.


Mintamegoldásként Tóth Marcell Domonkos budapesti tanuló Python nyelvű megoldását (i628.py) és Nagy Korina kecskeméti versenyző C++ nyelven készült munkáját (i628.cpp) adjuk közre.


Statisztika:

13 dolgozat érkezett.
10 pontot kapott:Bátorfi Balázs, Farkas Roland, Gyönki Dominik, Nagy 292 Korina, Nagy Borbála Adrienn, Pázmándi József Áron, Szabó Imre Bence, Tóth Marcell Domonkos.
9 pontot kapott:Sógor-Jász Soma.
8 pontot kapott:3 versenyző.

A KöMaL 2024. májusi informatika feladatai