Des Rätsels Lösung ???? Ich find sie nicht!
Übersicht

![]() |
dominikBetreff: Des Rätsels Lösung ???? Ich find sie nicht! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also nen Freund von mir hat mir vor ner Woche mal Folgendes Rätsel gestellt:
Code: [AUSKLAPPEN] Verfolständige folgende Reihe:
1 11 21 1211 wobei eine Zeile immer die darüberstehende beschreibt. man kann nur die drei zahlen 1,2,3 verwenden. Man kann die Reihe unendlich vordsetzen. [Damit die die wollen selber noch nen bischen Rätseln können schreib ich die Lösung erst ganz am Ende]. Zur Lösung des Rätsel (was ja eigentlich garnicht wirklich möglich ist) wollte ich ein kleines Progg schreiben. nur leider stimmt da irgentwas nicht und mein progg bricht immer nachdem es die ersten beiden Zeilen korrekt Vervollständigt hat ab. Und das war mein Versuch: Code: [AUSKLAPPEN] datei = WriteFile("Raetsel.txt") ;Erstellen der ersten Zeile in einer Datei aus der dann immer wieder die letzte Zeile ausgelesen wird WriteLine datei, "112213" ;Zu testzwecken hab ich nicht einfach nur mit einer eins in der ersten Zeile angefangen CloseFile datei ;die nächste Zeile müsste dann logischer weise 21221113 heisen Repeat datei_sch = OpenFile("Raetsel.txt") ;mit datei_sch wird in die Datei geschreiben datei_l = ReadFile("Raetsel.txt") ;und mit datei_l aus der datei gelsen Repeat a$ = ReadLine(datei_sch) ;ermitteln der Zeilenlänge um die Schleifendurchläufe zu bestimmen anzahl_zeile = Len(a$) Anzahl_alle_zeichen = Anzahl_alle_zeichen + anzahl_zeile Until Eof(datei_sch) SeekFile(datei_l, Anzahl_alle_zeichen - anzahl_zeile - 4) ;Hier in den Zwei Zeilen muss jetzt irgentwo der Fehler sein SeekFile(datei_sch, Anzahl_alle_zeichen) ;beim verschieben der Zeiger in der Datei WriteLine datei_sch, Chr$(10) vorherige_zeile = ReadLine(datei_l) zeichen_anzahl = Len(vorherige_zeile) einzeln_vorher = "" aktuelles_zeichen = "" zeile$ = "" speicher$ = "" anzahl$ = "" For i = 1 To zeichen_anzahl + 1 ;Für die anzahl der Zeichen in der in der Ausgelsenen Zeile jeweils ein Schleifendurvchlauf einzeln_vorher = aktuelles_zeichen aktuelles_zeichen = Mid$(vorherige_zeile, i, 1) ;ein Zeichen aus der Zeile auslesen If aktuelles_zeichen <> 0 And aktuelles_zeichen = einzeln_vorher Then ;Überprüfen ob das Aktuelle Zeichen mit dem letzen übereinstimmt speicher$ = speicher$ + aktuelles_zeichen ;wenn ja dann muss gespeichert werden wieviel gleiche zeichen hintereinander gefunden wurden Else anzahl$ = Len(speicher$) speicher$ = Left(speicher$, 1) If anzahl$ > 0 Then zeile$ = zeile$ + anzahl$ + speicher$ speicher$ = aktuelles_zeichen EndIf Next WriteLine datei_sch, zeile$ CloseFile datei_l ;Schließen der Dateien CloseFile datei_sch Until vorherige_zeile = 0 ich hoffe mein code ist halbweges verständlich. ich weiß es gib mit sicherheit bessere lösungen als jedesmal das ergebnis in eine datei zu schreiben und wieder auszulesen, z.B. Types. [Lösung des Rätsels:] 1 11 <- in der ersten Zeile steht eine Eins 21 <- in der zweiten Zeile stehen zwei Einser 1211 <- in der dritten stehen eine Eins eine Zwei und zwei Einser also die erste Zahl besagt immer wieviele der danach folgenden Zahl in der darüberstehende Zeile stehen. |
||
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof. |
noir |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das rätsel is sehr bekannt.
aber beim ersten mal bekommen es die wenigstens sofort raus. ![]() warum schreibst du im topic: Ich find sie nicht! und hast sie doch schon?? |
||
Fragt und man wird euch helfen
Das Alternativ BlitzBasic-Forum: FreeCoder Einfach chatten: BlitzChat Code&Text schnell und einfach pasten: FreePasting |
- Zuletzt bearbeitet von noir am So, März 06, 2005 13:07, insgesamt einmal bearbeitet
![]() |
Rob_ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist doch ganz einfach:
Code: [AUSKLAPPEN] 1 11 21 1211 ... 21111 |
||
AMD Athlon 64 3500+ | Infineon 1 GB DDR RAM | nVidia Geforce 7800 GTX |
noir |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Rob_ hat Folgendes geschrieben:
dominik hat doch doch die lösung schon erklärt. richtig wäre: 1 11 21 1211 111221 <- richtig |
||
Fragt und man wird euch helfen
Das Alternativ BlitzBasic-Forum: FreeCoder Einfach chatten: BlitzChat Code&Text schnell und einfach pasten: FreePasting |
- Zuletzt bearbeitet von noir am So, März 06, 2005 13:07, insgesamt einmal bearbeitet
![]() |
Clonker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Interessante Sache.
Hier mal meine Lösung: Code: [AUSKLAPPEN] dim zahlen$(0) anfang$ = "1" ;Anfangszahl For i = 1 to 10 print anfang$ anfang$ = raetsel_loesen(anfang$) next waitkey() : End function raetsel_loesen$(a$) Dim zahlen$(len(a$)) for i = 1 to len(a$) ;Für 1 if mid(a$,i,1) = "1" then If Mid(a$,i+1,1) <> "1" Then zahlen(i) = "11" Else If Mid(a$,i+2,1) <> "1" Then zahlen(i) = "21" i = i + 1 else zahlen(i) = "31" i = i + 2 Endif Endif Endif ;Für 2 if mid(a$,i,1) = "2" then If Mid(a$,i+1,1) <> "2" Then zahlen(i) = "12" Else If Mid(a$,i+2,1) <> "2" Then zahlen(i) = "22" i = i + 1 else zahlen(i) = "32" i = i + 2 Endif Endif Endif ;Für 3 if mid(a$,i,1) = "3" then If Mid(a$,i+1,1) <> "3" Then zahlen(i) = "13" Else If Mid(a$,i+2,1) <> "3" Then zahlen(i) = "23" i = i + 1 else zahlen(i) = "33" i = i + 2 Endif Endif Endif next x = Len(a$) a$ = "" for i = 1 to x a$ = a$ + zahlen(i) next a$ = replace(a$,"0","") Return a$ End Function |
||
Die exzessive Akkumulation von Fremdwörtern suggeriert pseudointellektuelle Kompetenz.
Athlon XP 2800|Radeon 9600 Pro|512MB DDR RAM|240GB Festplatte |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Meins: Code: [AUSKLAPPEN] Graphics 800, 600, 32 PrintReihe( "1", 0 ) WaitKey End Function PrintReihe( val$, cnt% ) If cnt% = 10 Then Return Print val$ cnt% = cnt% + 1 PrintReihe( Raetsel( val$ ), cnt% ) End Function Function Raetsel$( value$ ) Local temp$ = "" Local lastC$ = "" Local result$ = "" Local cnt% = 0 For i% = 1 To Len( value$ ) + 1 temp$ = Mid( value$, i%, 1 ) If ( i% = 1 ) Then lastC$ = temp$ If ( temp$ <> lastC$ ) result$ = result$ + Str( cnt% ) + lastC$ lastC$ = temp$ cnt% = 1 Else cnt% = cnt% + 1 EndIf Next Return result$ End Function Edit: Zitat: [Lösung des Rätsels:] 1 11 <- in der ersten Zeile steht eine Eins 21 <- in der zweiten Zeile stehen zwei Einser 1211 <- in der dritten stehen eine Eins eine Zwei und zwei Einser also die erste Zahl besagt immer wieviele der danach folgenden Zahl in der darüberstehende Zeile stehen. Da steht ja sogar die Lösung... ![]() Zitat: 1211 <- in der dritten stehen eine Eins eine Zwei und zwei Einser In der 3. Zeile stehen nämlich: eine zwei und eine eins! grüße |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group