C# :: Aufgabe #383 :: Lösung #1

2 Lösungen Lösungen öffentlich
#383

Längste aufsteigende Zahlenfolge im Array

Anfänger - C# von JKooP - 16.04.2021 um 18:05 Uhr
Gegeben ist ein Array bestehend aus aufsteigenden Integer-Zahlenfolgen,
die hin und wieder durch nicht in die Folge passende Zahlen unterbrochen werden.
Ziel soll es sein, die längste aufsteigende Zahlenfolge zu ermittelt.

Beispiel 1:
arr = {1, 3, 5, 4, 7, 8, 9, 10, 6, 2, 3, 4}
Lösung: 5 => {4, 7, 8, 9, 10}

Beispiel 2:
arr = {5, 5, 5, 5, 5}
Lösung: 1 => {5}

Schreibe eine Methode/Funktion, die als Ergebnis die Länge der längsten Zahlenfolge ausgibt.

Viel Spaß
#1
vote_ok
von dson (640 Punkte) - 18.04.2021 um 18:14 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;

namespace laengeste_aufsteigende_zahlenfolge_ermitteln
{
    class Program
    {
        static void Main(string[] args)
        {
            //Hier kann zwischen den Arrays gewählt werden
           //  int[] arr = new int[12]
             //    {1, 3, 5, 4, 7, 8, 9, 10, 6, 2, 3, 4};

          int[] arr = new int[5]
               {5, 5, 5, 5, 5};

            int zahl1 = 0;
            int zahl2 = 1;
            int zahl3 = 0;
            int zahl4 = 2;
            int aufsteigungszaehlerfix = 1;
            int aufsteigungszaehlerdynamisch = 1;

            while (zahl2 < arr.Length)      //Die Berechnung der höchsten Zahlenkette wird solange durchgeführt bis alle Items im array durch sind.
            {
                if (arr[zahl1] > arr[zahl2])                    //ist ein vorhergehendes Array Item größer als das folgende so ist die Zalhenreihe zu ende.
                {
                    if (aufsteigungszaehlerdynamisch > aufsteigungszaehlerfix)      //mittels dieser If schleife wird ermittel wie lange die längste zahlenreihe ist
                    {
                        
                        aufsteigungszaehlerfix = aufsteigungszaehlerdynamisch; //immer wenn eine Zahlenreihe länger als die vorhergehende ist wird der fix Wert überschrieben
                        zahl3 = zahl1 - aufsteigungszaehlerfix +1;            //Mittels dieser beiden berechnungen wird die Start und Schlussposition der Zahlen festgestellt welche zur längsten zahlenreihe gehören.
                        zahl4 = zahl1 +1;                                     
                    }
                    aufsteigungszaehlerdynamisch = 1;                          //beginnt eine neue Zahlenreihe so wird counter hier nun wieder auf 1 gestellt
                }


                if (arr[zahl1] < arr[zahl2])        //solange die zahl niedriger ist als die folgende wird der counter erhöht
                {
                    aufsteigungszaehlerdynamisch++;
                }
                
                //fortlaufende erhöhung der zählen die in der Schleife verwendet werden.
                zahl1++;        
                zahl2++;
                
            //    Console.WriteLine("Aufsteigungszählerdynamisch: {0}\nAufsteigungszählerfix: {1}\nzahl3: {2},\nzahl4: {3}", aufsteigungszaehlerdynamisch, aufsteigungszaehlerfix, zahl3, zahl4);
            }

            //Dieser Codeblock dient der Ausgabe
            //Mittels der vorhergehenden start und ende position können nun alle zahlen von bis ausgegbeen werden
            Console.Write("Höchste Zahlenreihe: {0}\nBeinhaltete Zahlen: ", aufsteigungszaehlerfix);
            while (zahl3 < zahl4)
            {
                Console.Write("{0}, ", arr[zahl3]); 
                if (aufsteigungszaehlerfix == 1)        //diese überprüfung verhinder das wenn der counter nut 1 ist eine zahl doppelt ausgegeben wird.
                {
                    break;
                }
                
                zahl3++;
            }
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben