C#-ban egy tömbön belül hogy tudom megnézni, hogy mennyi 0 van egymás után? És ahol a legkevesebb 0 van egymás után azt kéne kiírni
Pont ugyanúgy, mintha a való életben tennéd. Van egy csomó dobozod, mindegyikben gyümölcs. Keresed azt a ládát, ahol legkevesebb banán van egymás után.
Nyilván végignézed, számolod, hol mennyi van, megjegyzed, és a végén megállapítod az eredményt.
Ez egy tök jó példa az állapotgépek használatára, még ha hosszabb is a kódja, mint egy IQ-ból írt implementációnak:
lehetségesÁllapotok = [AzElőzőSzámNullaVolt, AzElőzőSzámNemNullaVolt, Kezdőállapot]
éppenKiválasztottElemIndexe = 0
aktuálisÁllapot = lehetségesÁllapotok.Kezdőállapot
aktuálisNullaSorozatHossza = 0
legrövidebbNullaSorozatHossza = legnagyobbÁbrázolhatóEgészSzám
amíg (éppenKiválasztottElemIndexe < tömbElemeinekSzáma) {
.. ha (aktuálisÁllapot == lehetségesÁllapotok.Kezdőállapot) {
.. .. ha (tömb[éppenKiválasztottElemIndexe] == 0) {
.. .. .. aktuálisÁllapot = lehetségesÁllapotok.AzElőzőSzámNullaVolt
.. .. .. aktuálisNullaSorozatHossza = 1
.. .. egyébként {
.. .. .. aktuálisÁllapot = lehetségesÁllapotok.AzElőzőSzámNemNullaVolt
.. .. }
.. }
..
.. egyébként ha (aktuálisÁllapot == lehetségesÁllapotok.AzElőzőSzámNullaVolt) {
.. .. ha (tömb[éppenKiválasztottElemIndexe] == 0) {
.. .. .. aktuálisNullaSorozatHossza növelése eggyel
.. .. }
.. .. egyébként {
.. .. .. aktuálisÁllapot = lehetségesÁllapotok.AzElőzőSzámNemNullaVolt
.. .. ..
.. .. .. ha (aktuálisNullaSorozatHossza < legrövidebbNullaSorozatHossza)
.. .. .. .. legrövidebbNullaSorozatHossza = aktuálisNullaSorozatHossza
.. .. }
.. }
..
.. egyébként ha (aktuálisÁllapot == lehetségesÁllapotok.AzElőzőSzámNemNullaVolt) {
.. .. ha (tömb[éppenKiválasztottElemIndexe] == 0) {
.. .. .. aktuálisNullaSorozatHossza = 1
.. .. .. aktuálisÁllapot = lehetségesÁllapotok.AzElőzőSzámNullaVolt
.. .. }
.. }
..
.. éppenKiválasztottElemIndexe növelése eggyel
}
#4 csak kíváncsiságból: mi értelme van egy ilyet használni? Értem, hogy hova akarsz kilyukadni, de teljesen fölösleges.
Valahogy ennyivel is el lehet végezni:
int jelenlegisorozat = 0;
int legkisebbsorozat = 0;
for(int i = 0;i<tömb elemeinek száma;i++)
{
if(tömb[i] == 0) {
//eggyel megnöveljük a jelenlegi sorozat elemét
jelenlegisorozat++;
} else {
//ha a jelenlegi elem nem nulla, akkor megnézzük, hogy eddig nullák voltak-e
//ha nem, akkor semmi érdekes nem történt, megyünk tovább
//ha igen, akkor megnézzük, hogy ez rövidebb sorozat-e az eddiginél
if(jelenlegisorozat != 0) {
//eddig nullás sorozat volt
if(jelenlegisorozat < legkisebbsorozat) {
//csere
legkisebbsorozat = jelenlegisorozat
}
//mivel az eddigi sorozat megtört, vissza kell állítanunk a jelenlegit nullára
jelenlegisorozat = 0;
}
}
}
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!