Zahlenreihe auswerten
-
Hi,
habe ein Problem, für das ich keine leichte und einfache lösung finde und hoffe auf ideen:
Folgene Aufgabe: Zahlen Reihe einlesen und wie folgt aus geben:
zum Beispiel:
Eingabe:1 2 2 3 3 3 3 4 4 55 55 6 2 3 0
Ausgabe:1 2*2 4*3 2*4 2*55 6 2 3Das ganze soll ohne Felder gelöst werden und die anzahl der zahlen ist unbekannt.
Eine lösung wäre über rekursion, aber die Reihenfolge der ausgabe wäre falsch herum. Über ein struct was auf das nächste struct zeigt, würde es funktionieren, scheint mir aber eine zu schwere lösung sein.
Jemadn ne bessere idee?
Danke
-
Wenn du Rekursion und irgendwas mit verlinkten Strukturen ernsthaft als Lösungen in Betracht ziehst (braucht man dafür beides nicht), solltest du die Aufgabe doch mit links lösen können. Denk nicht so kompliziert.
-
war ja auch der meinung das es was einfaches geben muss, aber meine komitionen haben das jetzt mit einem gemisch aus struct zeigern und rekursion gelöst
habe keine ahnung, man muss ja eigentlich alle zahlen oder zumindest die zwischenergebnisse bis zum schluss speichern, und ohne feld, fehlt wir ein stichwort
-
Du musst doch immer nur die letzte Zahl und die Anzahl ihres Auftretens speichern. Kommt danach dieselbe nochmal, erhöhst du die Anzahl, kommt danach eine andere (oder das Ende), gibst du Anzahl*Zahl aus, setzt die neue Zahl und die Anzahl auf 0 und machst weiter.
-
war auch meine rster gedanke, aber das sieht das nicht so aus :
Eingabe:1 2 2 3 3 3 3 4 4 55 55 6 2 3 0
Ausgabe:1 2*2 4*3 2*4 2*55 6 2 3sondern:
Eingabe:1 2
Ausgabe:1
Eingabe:2 3
Ausgabe:22
Eingabe:3 3 3 4
Ausgabe:43
Eingabe:4 55
...
-
Bitte lies Deine Texte wenigstens vor dem Absenden nochmal GANZ kurz durch.
Ich zähle mehr Rechtschreibfehler als Satzzeichen bei Dir...Wie wäre es mit etwas Code, damit man Dir auch sagen kann, wo der Fehler steckt?
-
gut
Mit struct:
struct test{ int zahltyp, anzahl; struct test *zeigervar; }; int monoton(struct test *zeiger){ int t,z; t=zahl(&z); if(t!=0){ if (z==0){(*zeiger).zeigervar=NULL;} else{ if (z== (*zeiger).zahltyp){(*zeiger).anzahl++;} else {(*zeiger).zeigervar=malloc(sizeof(struct test)); unterzeiger=(*zeiger).zeigervar; (*unterzeiger).zahltyp=z; (*unterzeiger).anzahl=1; } monoton(unterzeiger); } } return 0; } int ausgabe(struct test* zeiger){ if ((*zeiger).zeigervar==NULL) {printf("\n"); return 0;} else{ zeiger=(*zeiger).zeigervar; if ((*zeiger).anzahl>1) { printf("%dx",(*zeiger).anzahl);} printf("%d ",(*zeiger).zahltyp); ausgabe(zeiger);} return 0; }
-
Seppelxxl schrieb:
war auch meine rster gedanke, aber das sieht das nicht so aus
Das ist ja offensichtlich nicht die Schuld des Algorithmus', sondern der Art und Weise, wie du die Eingabe gestaltest. Schick den ganzen String auf einmal rein und dann kommt das auch so raus wie gewünscht. Vielleicht hab ich dich auch falsch verstanden, dann solltest du nochmal genauer beschreiben, was das Problem ist.
-
int main(){
unterzeiger=startzeiger= malloc(sizeof(struct test));
monoton(unterzeiger);
ausgabe(startzeiger);return 0;
}
-
also eingegeben wird immer zahl für zahl mit enter
und das ergebnis soll am ende als zeile ausgegeben werden
-
Dann geht es nicht ohne O(n) Zwischenspeicheraufwand (für die Eingabe, die Ausgabe oder was auch immer, spielt keine Rolle).
-
Also habe mal mit einen der Übungsleiter des Kurses gesprochen, und er meinte das die Beispielaufgabe fehlerhaft ist und die Ausgabe nach jeder Änderung sofort angezeigt werden kann, also Problem gelöst
-
würg... Wechsel die Uni
Ich mein, wenn mans genau nimmt...
hätteste halt einen char-pointer erstellt, mit malloc 100 bytes geholt und dann da schön zwischengespeichert. Kein "Feld" und das Ergebnis hätte so aussehen können wie zuerst angenommen
-
Die zeitliche Verzögerung von Aus- und Eingabe sollte hier keine Rolle spielen.