Mit csinálok? Szigetek...

Repülőgéppel Európából Amerikába haladva adott távolságonként megmérjük az alattunk lévő felület tengerszint feletti magasságát. Ez az óceán felett 0, szárazföldek és szigetek felett pozitív egész érték. A mérések már Európa felett elkezdődnek és Amerika felett érnek véget. A mérési adatok maximális száma legyen 70.

int[] M = new int[] { 10, 20, 30, 10, 0, 0, 0, 50, 2, 100, 200, 500, 200, 0, 0, 0, 20, 20, 20, 20, 20, 3, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 45, 34, 2, 200, 0, 0, 20, 30, 30, 30, 30, 0, 0, 100, 200, 300, 20, 400, 500,1 ,1 , 0, 0, 20, 20, 20, 20 };
 
            int max = M[0]; // kezdetben az első elem az "eddigi legnagyobb"
            for (int i = 1; i < M.Length; i++) // végigmegyünk a 2. elemtől az utolsóig
            {
                /* 
                 * Ha az eddigi legnagyobbnál nagyobb elemet találunk, 
                 * akkor mostantól ő a "eddigi legnagyobb" 
                 */
                if (max < M[i]) max = M[i]; 
            }
            // A tömb végére érve az "eddigi legnagyobb" a tömb maximális értéke lesz
            Console.WriteLine("A legnagyobb mért érték: {0}", max);
            // Ábrázoljuk az adatokat
            for (int i = 20; i > 0; i--) // Végig megyünk a sorokon 20-tól 1-ig (felülről-lefelé)
            {
                for (int j = 0; j < M.Length; j++) // Végigmegyünk a mérési adatokon (balról-jobbra)
                {
                    if (i<=Math.Ceiling((double)M[j]/max*20))
                    {
                        Console.Write("#");
                    }
                    else
                    {
                        Console.Write("_");
                    }
                }
                Console.WriteLine(); // soremelés
            }
            // Hány sziget van?
            int db = 0; // még nem találtunk egy szigetet sem
            for (int i = 0; i < M.Length - 1; i++) // Az utolsó előtti elemig megyünk csak!
            {
                // Ha az i+1. pozíció szárazföld kezdet, akkor növeljük a darabszámot
                if (M[i] == 0 && M[i + 1] > 0) db++;
            }
            // Az utolsó szárazföld kezdet nem szigetet, hanem a partot jelöli!
            Console.WriteLine("A szigetek száma: {0}", db - 1);
            // Mekkora és hányadik a leghosszabb sziget?
            int maxSzigetHossz = 0; // Az eddigi leghosszabb sziget hossza
            int maxSzigetSorszam = 0; // Az eddigi leghosszabb sziget sorszáma
            int aktSzigetHossz = 0; // Az aktuális sziget hossza
            int aktSzigetSorszam = 0; // Az aktuáis sziget sorsáma
            for (int i = 1; i < M.Length - 1; i++) // a másodiktól az utolsó előtti elemig megyünk
            {
                if (M[i - 1] == 0 && M[i] > 0) // sziget kezdet
                {
                    aktSzigetHossz = 1;
                    aktSzigetSorszam++;
                }
                else if (M[i] > 0) // szárazföld "belső"
                {
                    aktSzigetHossz++;
                }
                else if (M[i - 1] > 0) // sziget vég
                {
                    if (aktSzigetHossz > maxSzigetHossz) // hosszabb az eddigi leghosszabbnál
                    {
                        maxSzigetHossz = aktSzigetHossz;
                        maxSzigetSorszam = aktSzigetSorszam;
                    }
                }
            }
            Console.WriteLine("A leghosszabb sziget sorszáma: {0}", maxSzigetSorszam);
            Console.WriteLine("A leghosszabb sziget hossza: {0} egység", maxSzigetHossz);
 
 
            Console.ReadKey();