Hallo!
Ich habe gelesen das jemand für ein Memory-Spiel einen Algo brauchte der ihm die maximale größe einer Karte berechnet, dabei gelten folgende Bedingung:
Habe:
Fenster:
x = Breite
y = Höhe
Karten:
z = Anzahl
Suche:
Karte:
x = Breite
y = Höhe, diese muss doppelt so hoch wie die Breite (x) sein!
Hier wie man es berechnet, habe den Algo heute während einer Vorlesung aufgschrieben:
Fensterfläche = A
Quadratseite = a
y = Höhe
x = Breite
1. Fenster.x * Fenster.y = A
2. Wurzel(A / z) = a
3. a * 1/3 = help
4. a - help = Karte.x
5. a + help = Karte.y
Hier ein Test:
Gegeben x = 600 y = 800 z = 20
Man müsste ggf. anders, am Besten denke ich am Ende runden.
Ich denke mal diesen Algo kann man ganz gut gebrauchen. Natürlich ist dabei nur die Berechnung drin das setzen müst ihr schon selbst machen 😉
Ich habe es in 5 Schritte gegliedert nur zur besseren Übersicht.
Code-Hacker
600/103 = 5
800/205 = 3
5*3 = 15 != 20 -> Fehler
Mathematisch:
A Kartenbreite
a Fensterbreite
b Fensterhöhe
Gleichung: floor(b/(2*A)) * floor(a/A) ≥ z
Die Vereinfachung (b/(2A)) * (a/A) = z
fürht zu A^2 = ab/(2*z)
damit kommt man bei deinem Beispiel auf ~ 109, also (abgesehen vom Runden) auf das selbe (~103) ... das Problem ist nur, dass die Vereinfachung zu stark ist und den obigen Fehler (15 statt den geforderen 20) verursacht ...
Original von cdr
600/103 = 5
800/205 = 35*3 = 15 != 20 -> Fehler
Das beispiel ist von jemand anderem. Ich habe es nur kopiert. Bei meiner Berechnung klappt es einigermaßen (runde anders, am Ende), aber auch nicht perfekt, habe diese Probe vergessen. Werde ihn nochmal überarbeiten.
Außerdem sind da Fehler in meinem letzten Beitrag. Da stimmt einiges nicht. Da sind Sachen verdreht, weil ich die geändert habe. Die sind auch bei dir deswegen. Ich überarbeite das nochmal.
Code-Hacker
Also die Berechnung ist zugegeben nicht perfekt, aber das werde ich mir nochmal ansehen um es so genau wie möglich zu bekommen, hier jetzt erst einmal die korrigierte Form:
Algo nochmal:
Fensterfläche = A
Quadratseite = a
y = Höhe
x = Breite
1. Fenster.x * Fenster.y = A
2. Wurzel(A / z) = a
3. a * 1/3 = help
4. a - help = Karte.x
5. a + help = Karte.y
Hier der Test, richtig(!):
Gegeben y = 600 x = 800 z = 20
Jetzt ist es auch richtiger:
600/206,7 ~= 2,9
800/103,3 ~= 7,7
2,9*7,7 = 22,03
Allerdings noch nicht ganz so wie es soll, allerdings für 5 minuten überlegen und rechnen relativ ok (mehr Zeit hatte ich in der Vorlesung nicht und war der einzige von 5 der überhaupt eine Lösung hatte).
Code-Hacker