C# :: Aufgabe #383
2 Lösungen

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ß
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ß
Lösungen:

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++; } } } }
NET 5.x; C# 9.x; VS-2019
C#-Code

using System; var s = new int[] { 1, 3, 5, 4, 7, 8, 9, 10, 6, 2, 3, 4 }; Console.WriteLine(LongestSubseq(s)); static int LongestSubseq(int[] n) { var m = 0; var l = 0; for (var i = 0; i < n.Length; ++i) { if (i > 0 && n[i - 1] >= n[i]) m = i; l = Math.Max(l, i - m + 1); } return l; }