ALGORITHMEN - Teil XVII: Im Gruselkeller der Hirnwindungen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Lösung zu NmR 60
      -----------------

      Quellcode

      1. WindowTitle "NmR 60-Löser"
      2. CLS:font 2:set("decimals",1)
      3. Declare a!,b!
      4. whileloop 1,100:a!=&Loop
      5. whileloop 1,100:b!=&Loop
      6. if a!*b!+a!+b!=54
      7. print "\n a=";a!,"b=";b!," Summe: ";a!+b!
      8. endif
      9. endwhile
      10. endwhile
      11. beep
      12. waitinput
      13. ' sollte 4 + 10 = 14 ergeben!
      Alles anzeigen
    • Analytische Lösung zu NmR 60
      -----------------------------

      Spoiler anzeigen
      Die Beobachtung einer Symmetrie in der Aufgabe a + a*b + b = 54 liefert die Idee, daß die linke Seiite in zwei Faktoren zerlegbar sein könnte. Naja, fast: (a+1)*(b+1) = a*b + 1*b + a*1 + 1 ... wobei der letzte 1er zu viel des Guten ist, und daher mittels Subtraktion von 1 kompensiert werden muss, um zur ursprünglichen Aufgabe zu gelangen:
      a + a*b + b = (a+1)*(b+1) - 1 = 54
      Daraus folgt aber: (a+1)*(b+1) = 55

      Weitere Beobachtung: 55 lässt sich nur zerlegen in 5 * 11, wodurch obige Klammerausdrücke identifiziert werden können:
      (a+1) = 5 >>> a=4; (b+1) = 11 >>> b=10, oder umgekehrt a=10 und b=4.

      Beide Varianten liefern das gleiche gesuchte Ergebnis:
      a + b = 4 + 10 = 10 + 4 = 14
      ======================
    • Abt. Noch mehr Rätsel - NmR 61 ´Auf den Hund gekommen´
      =============================================
      Spoiler anzeigen

      Tierarzt Dr. Doolittle wird auf einen Bauernhof gerufen, weil Schaf Dolly angeblich an Gewicht verloren hat. Leider hat der Knecht die Gewichte der Waage vergessen. Der findige Dr. Doolittle stellt sich selbst als Gewicht zur Verfügung, um ein Schaf und mehrere Hirtenhunde sowie zum Vergleich einen Sack Kartoffeln abzuwiegen. Ergebnis:

      * Er selbst und das Schaf wiegen so viel wie 4 Sack Kartoffeln.
      * Das Schaf und zwei Hirtenhunde wiegen so viel wie 3 Sack Kartoffeln.
      * Das Schaf wiegt so viel wie 4 Hirtenhunde.

      Leider ist Dr. Doolittle in letzter Zeit etwas aus dem Leim gegangen und weiss nicht, wie viel er selbst genau wiegt. Er wird sich daheim aber neu wiegen und kann dann errechnen, wieviel das Schaf wiegt. Dazu ist aber als Vorfrage zu klären:

      Wieviele Hirtenhunde wiegen genausoviel wie Dr. Doolittle?
    • Lösung zu NmR 61
      ------------------
      Spoiler anzeigen
      Sei D das Gewicht von Dr. Doolittle, S das des Schafes, H eines
      Hirtenhundes, K eines Kartoffelsacks. Dann ist lt. Angabe ...

      (1) D+S=4K
      (2) S+2H=3K
      (3) S=4H
      ------------
      (32) 4H+2H=3K >>> 6H=3K >>> 2H=K
      (322) S+K=3K >> S = 2K
      (3221) D+2K=4K >>> D=2K >>> D=4H
      Dr.Doolittle wiegt so viel wie 4 Hirtenhunde.
      -------------------------------------------
      P.S.: Schaf Dolly scheint es gut zu gehen, es wiegt genau so viel wie der Doktor!
      Muss ein stattlicher Bock sein!
    • Lösungsprogramm für Rätsel vom Typ NmR 62
      -------------------------------------------
      Nur bis max. 50000, da sonst zu ungenau! Das Ergebnis für den Summanden 89 lautet: 1 Lösung: 44
      Gruss

      Quellcode

      1. WindowTitle "Rätsel vom Typ NmR-62 lösen"
      2. CLS:font 1:set("decimals",1)
      3. Declare n&,s&,w!,anz&
      4. lup:
      5. anz&=0
      6. print "\n SUMMAND: ";
      7. input s&:case s&=0:s&=89
      8. if abs(s&)>50000:print " *** MAX. 50000 ***":goto "lup":endif
      9. 'locate %csrlin-1,23
      10. print " N = ..."';
      11. whileloop 1,2*s&:n&=&Loop
      12. w!=round(sqrt(n&*n&+s&),13)
      13. if w!=int(w!)
      14. print " ";n&;" ^2 + ";s&;" = ";int(n&*n&+s&);" = ";int(w!);"^2"'+"=";int(w!^2);"),"';
      15. inc anz&
      16. endif
      17. endwhile
      18. case anz&=0:print "{} ";
      19. locate %csrlin,%pos-1:print " ";
      20. print tab(60);" = ";anz&;" Loesungen"
      21. goto "lup"
      Alles anzeigen
    • Analytische Lösung zu NmR 62:
      -----------------------------------
      Spoiler anzeigen
      Gesucht sind alle Lösungen für n^2 + 89 = m^2 mit n,m € {N}.
      Wir können umformen auf 89 = m²-n², und das wiederum auf (m-n)*(m+n)=89.

      Da 89 eine Primzahl ist, gibt es nur eine Zerlegung: 1 * 89.
      Es ist klar, dass (m-n) nur der kleinere Faktor sein kann, also
      identifizieren wir (m-n) = 1 und (m+n)=89. Daraus ergibt sich jeweils
      m=n+1 und m=89-n, und das kann man in m gleichsetzen:

      n+1 = 89-n >>> n+n=88 >>> n=44, die einzige ganzzahlige Lösung.
      Die Antwort lautet daher: Es gibt genau 1 Lösung.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

    • Abt. Noch mehr Rätsel - NmR 63 ´Euro Teuro´
      ===============================
      Franz kauft im Supermarkt x Stück Äpfel zum Preis von y Euro pro Apfel.
      Auf dem Heimweg entdeckt er einen neuen Wochenmarkt und kauft dort
      y Stück Äpfel zum Preis von x Euro/Apfel.

      Was hat ihn ein Apfel dann durchschnittlich gekostet?
    • Lösung zu NmR 63:
      ---------------------
      Spoiler anzeigen
      A) Wieviele Äpfell wurden eingekauft?
      1. Einkauf: x [Äpfel], 2. Einkauf: y [Äpfel], gibt zusammen x+y [Stück Äpfel]

      B) Was wurde insgesamt bezahlt?
      1. Einkauf: y [Eur/Apfel] * x [Stück] = Kosten des 1. Einkaufs
      2. Einkauf: x [Eur/Apfel] * y [Stück] = Kosten 2. Einkauf
      ergibt insgesamt Kosten von y*x+x*y = 2*x*y [Eur]

      C) Durschschnittlicher_Preis = Gesamtkosten / Stückzahl_insgesamt:
      P = 2*x*y/(x+y) [Eur/Stück]


    • Abt. Noch mehr Rätsel - NmR 65 Teil 2
      =============================
      Die Geschäftsleitung ordnet in der nächstfolgenden Woche an, die Produktion wieder auf die ursprüngliche Menge M zurückzufahren. Um wieviel Prozent muss die Wochenmenge nun reduziert werden?


      Abt. Noch mehr Rätsel - NmR 65 Teil 3
      =============================
      Wiie hängen die Prozentsätze der beiden vorherigen Teile zusammen? Kann man die ineinander umrechnen?


      Abt. Noch mehr Rätsel - NmR 65 Teil 4 (Schluss)
      ====================================
      Kann man, falls einem beide Prozentsätze aus Teil 1 und Teil 2 bekannt sind, auf die Zahl der mehr produzierten Autos schließen?
    • Lösungen zu NmR 65 (Prozentrechnen)
      -------------------------------------
      Spoiler anzeigen

      Teil 1:
      Istmenge = X = M = Bezugsmenge für die p Prozent Steigerung.
      Neue Sollmenge = S = M + M * p[%]/100, bzw. herausgehoben:
      Formel: S = M*(1+p[%]/100)
      ------------------------------
      Teil 2:
      M = S - S * r[%]/100 = S*(1-r/100) >>> M/S = 1-r/100
      Formel: r = 100*(1-M/S)
      ------------------------
      Teil 3 - Umrechnungsformel:
      S = M*(1+p[%]/100) eingesetzt in r = (1-M/S) >>> r = 100*( 1-M/(M*(1+p/100)) )
      oder mit r,p nicht in % ausgedrückt: r = 1 - M/(M*(1+p))
      >>> 1-r = M/(M*(1+p)) = 1/(1+p) >>>
      Formel: r = 1-1/(1+p)

      Antwort: Ja, es kann direkt umgerechnet werden.
      Die Reduktionsrate r[%] ergibt sich aus der Steigerungsrate p[%] durch die
      Formel r[%] = 100 - 100/(1+p[%]/100), die Rückkonversion durch die
      Formel p[%] = 100/(1-r[%]/100)-100

      * Beispiel A: Um wieviel % muss nach einer 20%-Steigerung gesenkt werden, um auf die ursprüngliche Zahl zu kommen?
      Abschlagsprozentsatz r = 1 - 1/(1+0.20) = 1 - 1/1.2 = 1 - 0.83333333 = 0.166666 = 16.667 %

      * Beispiel B (für Neuankömmlinge in Matheland):
      Bei der Umsatzsteuer wird ein %-Satz auf den Nettobetrag als Bezugsbetrag aufgeschlagen, um den Rechnungs-Bruttobetrag zu erhalten. Weiss man aber nur den Bruttobetrag, muss man erst den Abgschlags-%-Satz errechnen bzw. heranziehen, um den Nettobetrag zu erhalten, weil ja diesmal der höhere Bruttobetrag die Basis für den Prozentsatz bildet.

      Teil 4:
      Antwort: Nein, siehe Teil 3: r ist direkt in p umrechenbar und umgekehrt, ohne Mengen zu involvieren.
      Aus p und r kann man daher nicht auf Mengen schließen.
    • Neu

      Abt. Noch mehr Rätsel - NmR 66 ´Museum´
      ================================
      Sonntag, Museumsbesuch. Erwachsene 10.-, Kinder die Hälfte.
      Gegen Feierabend wird Kasse gemacht: Gezählt wurden 50 Personen,
      in der Tageskasse sind 350.-:
      Für die Statistik: Wieviele Erwachsene waren da im Museum?
    • Neu

      Lösung zu NmR 66 ´Museum´
      --------------------------------
      Spoiler anzeigen
      Umstellen auf das zu eliminierende Element (k):
      (I) 350 = e*10 + k*5 >>> (350 - e*10)/5 = k
      (II) e + k = 50 >>> k=50 - e
      Gleichsetzen, sodaß das Element verschwindet:
      (II=I): 50 - e = (350 - e*10)/5
      Umstellen nach der gesuchten, nun einzigen, Variable (e)
      250 - 5*e = 350 - e*10
      e*10 - 5*e = 350 - 250
      5*e = 100
      e = 20 Erwachsene
      ----------------------
      Kann das stimmen? Probe durch einsetzen:
      Wieviele Kinder?: k=50-e = 30 Kinder
      20*10.- + 30*5.- = 200 + 150 = 350.-
      q.e.d.
      -----------------------



      Abt. Noch mehr Rätsel - NmR 67 ´Die Zwei´
      =============================
      Wieviele Zahlen zwischen 100 und 400 enthalten eine Ziffer ´2´ ?
    • Neu

      Lösung zu NmR 67 ´Die Zwei´
      -------------------------------

      Spoiler anzeigen

      102,112,*,132,...,192 = 9
      *) 120,...,129 = 10
      200....299 = 100
      302,312,**,332,...,392 = 9
      **) 320,...,329 = 10
      Ergebnis:
      19 + 100 + 19 = 138

      Probe:

      Quellcode

      1. cls:font 2:declare n&
      2. whileloop 100,400
      3. case instr("2",str$(&loop))>0:inc n&
      4. endwhile:print n&:waitinput:end
      Stimmt also!

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

    • Neu

      Abt. Noch mehr Rätsel - NmR 68 ´Gegenwind´
      ==============================
      Ein Flugzeug fliegt das erste Drittel der Flugzeit mit 800 km/h. Nach Ankunft gibt der Kapitän bekannt, dass die Geschwindigkeit für diesen Flug durchschnittlich 700 km/h war.
      Frage: Was war dann aber die Fluggeschwindigkeit in den letzten 2/3 der Flugzeit?


      P.S. Linkempfehlung: Global Firepower - Wer aller ist bis an die Zähne bewaffnet?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

    • Neu

      Lösung zu NmR 68 ´Gegenwind´
      ------------------------------------
      Spoiler anzeigen

      Grundgleichung: s = v * t
      Flugzeit t_gesamt = 100 % = 1

      s1 = v1 * 1/3 t = 800 * 1/3 * 1
      s2 = v2 * 2/3 * 1

      Gesuchte Geschwindigkeit am 2. Streckenabschnitt = x
      Die Gesamtstrecke setzt sich zusammen aus:
      s1+s2 = s_gesamt = 800 * 1/3 + x * 2/3 = 700

      Nach x auflösen:
      800 * 1/3 + x * 2/3 = 700
      x * 2/3 = 700 - 800 * 1/3
      x = 3/2 * (700 - 800 * 1/3)
      x = 3/2 * 700 - 3/2 * 800 * 1/3
      x = 3/2 * 700 - 1/2 * 800
      x = 1/2 * 2100 - 400
      x = 1050 - 400
      x = 650 [km/h]
      ==========
    • Neu

      Abt. Noch mehr Rätsel - NmR 69
      =====================
      Der Finanzminister von Fidji hat entschieden, daß es in Zukunft nur mehr Münzen im Wert von 33 Fidji-$ und 60 Fidji-$ geben wird. Was ist der kleinste Preis, der damit bezahlt werden kann, wenn sowohl Verkäufer als auch Käufer genug Wechselgeld besitzen?
    • Neu

      Lösung zu NmR 69
      ---------------------
      Die Frage zielt auf den Größten gemeinsamen Teiler von 60 und 33 ab. Dazu gibt es schon einige Programme in unserer ´Algorithmen´-Sammlung. Die Antwort ist: Ein Preis von 3,- ist die kleinste Einheit, die bei dieser Münzwert-Wahl erzielt werden kann: 5*60.- = 300 werden gegeben und 9*33.- = 297.- zurückgezahlt.
      Gruss

      Quellcode

      1. WindowTitle "NmR 69 ´Fidji´ - Anwendungsbeispiel für ggT"
      2. CLS:font 1:declare a&,b&,h&,i&:nochma:
      3. print "\n Wert der Muenze 1 = ";:input a&
      4. case a&<1:goto "nochma":nochmb:
      5. print " Wert der Muenze 2 = ";:input b&
      6. case b&<1:goto "nochmb"
      7. print " Kleinster damit zahlbarer Preis: ";
      8. Moderner_GGT_Algo:
      9. :While b&:h&=a& mod b&:a&=b&:b&=h&:EndWhile:print a& '=ggT(a,b)
      10. print
      11. print " Geht es um die Anzahl der Muenzen, die (+) gegeben "
      12. print " und (-) retourniert werden sollen, dann nimmt man "
      13. print " den ´Erweiterten Euklidischen Algorithmus´:"
      14. declare a!,b!,erg![2]:set("decimals",18)
      15. repeat
      16. print "\n a = ";:input a!
      17. print " b = ";:input b!
      18. ErwGGTf(a!,b!,erg![]) ' Ergebnis in erg![]
      19. print "\n\n ErwGGTf(a,b) = ";
      20. print format$("%g",erg![0]);" * ";
      21. font 0:print format$("%g",a!);:font 2
      22. print if((erg![1]*b!)<0," - "," + ");
      23. print format$("%g",abs(erg![1]));" * ";
      24. font 0:print format$("%g",abs(b!));:font 2
      25. print " = ";format$("%g",erg![0]*a!+erg![1]*b!);" = GGT\n"
      26. until 0
      27. proc ErwGGTf :parameters a!,b!,erg![]
      28. if (a!<=0) or (b!<0):erg![]=0:return erg![]:endif
      29. if b!=0:erg![0]=1:erg![1]=0:erg![2]=a!:return erg![]:endif
      30. declare u1!,u2!,u3!,v1!,v2!,v3!,t1!,t2!,t3!,q!
      31. u1!=1:u2!=0:u3!=a!:v1!=0:v2!=1:v3!=b!
      32. while v3!<>0
      33. q!=intf(divf(u3!,v3!))
      34. t1!=u1!-v1!*q!:t2!=u2!-v2!*q!:t3!=u3!-v3!*q!
      35. u1!=v1!:u2!=v2!:u3!=v3!:v1!=t1!:v2!=t2!:v3!=t3!
      36. endwhile
      37. erg![0]=u1!:erg![1]=u2!:erg![2]=a!:return erg![]
      38. endproc
      39. proc Intf :parameters a!
      40. return val(format$("%g",sgn(a!)*abs(round(abs(a!)-0.5,0))))
      41. endproc
      42. proc divf :parameters a!,b!
      43. case abs(b!)<val("1e-306"):return sgn(a!)*1e300
      44. return a!/b!
      45. endproc
      46. proc sgn :parameters a!
      47. return if(abs(a!)<val("1e-16"),0,if(a!<0,-1,1))
      48. endproc
      Alles anzeigen
    • Neu

      Abt. Farey-Haros Bruchfolge
      ==================
      Farey-Brüche spielen in der Zahlentheorie eine Rolle. Benannt sind die Farey-Folgen nach dem britischen Geologen John Farey Sr., der diese Anordnung der Brüche 1816 vorschlug. Der französische Mathematiker Augustin Louis Cauchy griff das auf und benannte diese Folgen nach Farey. Man kann damit z.B. den Begriff der "Lokalen Ordnung" (.pdf dazu) definieren.

      Gruss

      Brainfuck-Quellcode

      1. WindowTitle "Farey-Haros Bruchfolge erzeugen"
      2. '(CL) Translated 2018-08 by P.Specht, Vienna/EU
      3. 'Rosetta Code-Aufgabe ´Farey sequence´ in XProfan_11.2a
      4. 'Q: http://rosettacode.org/wiki/Farey_sequence
      5. WindowStyle 24:Window 0,0-%maxx,%maxy-40:Font 2
      6. print "\n Die Farey-Folge Fn der Ordnung n ist die Folge der \n"+\
      7. " vollständig gekürzten Brüche zwischen 0 und 1, die \n"+\
      8. " dann im Nenner unter dem Bruchstrich einen Wert \n"+\
      9. " kleiner gleich n aufweisen und in aufsteigender\n"+\
      10. " Größe des Bruchs angeordnet sind. \n\n"
      11. Declare i&,out&,nbr&
      12. print " Bis zu welcher Farey-Folge tatsächlich ausgeben? N = ";
      13. input out&:print
      14. 'Bis zur Reihe out& tatsächlich ausgeben, darüber nur Anzahl der Elemente
      15. case out&=0:out&=12
      16. Whileloop out&:i&=&Loop
      17. Print "F";i&;" = ";
      18. nbr&=Farey(i&,0,out&),
      19. print "<";nbr&;" Elemente>\n"
      20. EndWhile
      21. Print
      22. whileloop 100,1000,100:i&=&Loop
      23. Print "F";i&;
      24. Print if(i&<1000," ","");" = ";
      25. Print Farey(i&,0,out&),"Elemente"
      26. Endwhile
      27. beep:print "-----------------------------"
      28. waitinput:end
      29. Proc Farey :parameters n&,desc&,out&
      30. var a&=0:var b&=1:var c&=1:var d&=n&:var k&=0
      31. declare aa&,bb&,cc&,dd&,count&
      32. :If desc&:a&=1:c&=n&-1:EndIf
      33. inc count&
      34. case n&<=out&:Print a&;"/";b&;" ";
      35. While ((c&<=n&) And Not(desc&)) Or ((a&>0) And desc&)
      36. aa&=a&:bb&=b&:cc&=c&:dd&=d&
      37. k&=(n&+b&)/d&
      38. a&=cc&
      39. b&=dd&
      40. c&=k&*cc&-aa&
      41. d&=k&*dd&-bb&
      42. inc count&
      43. case n&<=out&:Print a&;"/";b&;" ";
      44. Endwhile
      45. case n&<12:Print
      46. Return count&
      47. EndProc
      Alles anzeigen