BPS #23: Nummernsuche - Auswertung
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
|
Moderator
Betreff: BPS #23: Nummernsuche - Auswertung
|
So, Aug 19, 2012 22:07
Antworten mit Zitat
|
Viele Zahlen - wer hat sie gemeistert?
Das war die Aufgabe
Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern.
Diskussion
Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen.
Nächste Aufgabe
In einer Woche wird die Musterlösung nach editiert und in 2 die nächste Aufgabe eingestellt.
Viel Spaß & viel Erfolg!
Musterlösung:
BlitzMax: [AUSKLAPPEN] [EINKLAPPEN] SuperStrict
SeedRnd(0)
Const count%=1000 Local Zahl:Int[count] For Local i:Int = 0 Until count Zahl[i]=Rand(1,1000000) Next
Zahl.Sort()
Local number:Int = 8000 Local val:Int = count *.5 Local pos:Int = val Local oldpos:Int, nr:Int
Repeat nr:+1 Print(nr + ") Zahl[" + pos + "] = " + Zahl[pos]) oldpos = pos val:*.5 If Zahl[pos] = number Then Print(number + " enthalten!") End ElseIf Zahl[pos] < number Then pos:+val Else pos:-val EndIf Until oldpos = pos
Print("Keine "+number+" hier!") End
|
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
|
-
Zuletzt bearbeitet von Xeres am So, Sep 02, 2012 12:01, insgesamt einmal bearbeitet
|
|
Mo, Aug 20, 2012 20:11
Antworten mit Zitat
|
BlitzMax: [AUSKLAPPEN] [EINKLAPPEN] SuperStrict
SeedRnd(0)
Const count%=1000 Local Zahl:Int[count] For Local i:Int = 0 Until count Zahl[i]=Rand(1, 1000000) Next
Zahl.Sort()
Global Trials%
Global MaxTrials%
Global TrialSum%
Local Hits%
For Local i% = 1 To 1000000 Trials = 0 Local Resultat% = find(i, Zahl) If Resultat% > -1 Then Hits:+1 Print i + " = " + Zahl[Resultat] End If TrialSum:+Trials MaxTrials = Max(MaxTrials, Trials) Next Print Hits + " mal wurde die Zahl gefunden." Print "Maximale Anzahl an Versuchen: " + MaxTrials Print "Durchschnittliche Versuchsanzahl: " + (TrialSum / 1000000.0)
Function find%(Number%, Array%[])
Local MinIndex% = 0 Local MaxIndex% = Array.length-1 Local Index%, OldIndex% If Number < Array[MinIndex] Or Number > Array[MaxIndex] Then Return -1 If Number = Array[MinIndex] Return MinIndex If Number = Array[MaxIndex] Return MaxIndex
Repeat Local IndexWidth% = MaxIndex - MinIndex Local ArrayWidth% = Array[MaxIndex] - Array[MinIndex] Local Value% = IndexWidth * (Number - Array[MinIndex]) / ArrayWidth Value = Max(1, Min(IndexWidth - 1, Value)) Index = MinIndex + Value Trials:+1
If Array[Index] = Number Then Return Index If Index = OldIndex Then Return -1
OldIndex = Index If Array[Index] < Number Then MinIndex = Index Else MaxIndex = Index End If Forever
End Function
|
|
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group