Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

Glückspielvorteil

Diskussion: Glückspielvorteil im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Und hier noch meine VB Lösung zur Fragestellung der Simulation. Ich lasse das ganze 1 Mio. mal durchlaufen, was ...

Antwort
Alt 30.11.10, 16:59   #31 (permalink)
 
Registriert seit: 10.11.10
DMRMcK Leistung: Z3
Likes: 0
Standard Wer hätte das gedacht...

Anzeige

Und hier noch meine VB Lösung zur Fragestellung der Simulation.

Ich lasse das ganze 1 Mio. mal durchlaufen, was zu einem Durchschnitt zwischen ~10,49 und ~10,51 führt => SP1 gewinnt ~500k.
Bei 10 Mio. Durchläufen liegt es dann ziemlich genau bei 10,50 (~10,499) => SP1 gewinnt ~5 Mio.

Hätte ich anfangs nicht gedacht.

Als ich dann aber an ein Brettspiel dachte ("Die Siedler von Catan"), konnte ich es sehr gut nachvollziehen, da man, wenn man dies spielt, die Erfahrung macht, dass die 7 die häufigste Zahl ist, die gewürfelt wird (man spielt es mit 2 Würfeln). Hälfte von 7 = 3,5 => 3x3,5 = 10,50.

Simulation in VB   
Code:
Option Explicit On

Module Module1

    Dim w1, w2, w3, wSum, wKumul As Long
    Dim sp1Kap, sp2Kap As Integer
    Dim average As Double

    Sub Main()
        Randomize()
        sp1Kap = 1000
        sp2Kap = 1000
        wKumul = 0

        For i As Integer = 0 To 1000000
            sp1Kap -= 10
            sp2Kap += 10
            w1 = CLng(Int((6 * Rnd()) + 1))
            w2 = CLng(Int((6 * Rnd()) + 1))
            w3 = CLng(Int((6 * Rnd()) + 1))
            wSum = w1 + w2 + w3
            sp2Kap -= wSum
            sp1Kap += wSum
            wKumul += wSum
        Next

        Console.WriteLine("Sp1 Endkapital: " & sp1Kap.ToString)
        Console.WriteLine("Sp2 Endkapital: " & sp2Kap.ToString)
        average = wKumul / 1000000
        Console.WriteLine("Durschnittlicher Wurf: " & average.ToString)
        Console.ReadLine()

    End Sub

End Module


PS: Entschuldigt, wenn ich nach einander die alten Threads ausgrabe, aber ich habe diese Forum erst vor paar Wochen entdeckt und erfreue mich einfach an Euren Aufgaben.
DMRMcK ist offline   Mit Zitat antworten
Alt 30.11.10, 18:43   #32 (permalink)
Moderator
 
Benutzerbild von Tarantoga
 
Registriert seit: 11.02.06
Tarantoga QuadcoreTarantoga QuadcoreTarantoga QuadcoreTarantoga QuadcoreTarantoga QuadcoreTarantoga Quadcore
Likes: 229
Standard

Zitat:
DMRMcK:
Entschuldigt, wenn ich nach einander die alten Threads ausgrabe, aber ich habe diese Forum erst vor paar Wochen entdeckt und erfreue mich einfach an Euren Aufgaben.
Kein Grund sich zu entschuldigen - dafür sind die Aufgaben doch da...

Aber nen Fleißsternchen gibt's nicht...
Tarantoga ist offline   Mit Zitat antworten
Alt 01.12.10, 02:16   #33 (permalink)
 
Registriert seit: 12.01.09
lone.wolf Leistung: Z3
lone.wolf eine Nachricht über AIM schicken
Likes: 1
Standard

Habs zwar nicht ausprogrammiert - obwohl extra darauf hingewiesen wird - sorry deswegen; hier gibts schon einige programmiertechnische Lösungswege und einer davon wäre auch mein Ansatz, also machts von dem her glaub ich keinen Unterschied.

Ein Dank an mein Vorredner - hättest du diesen Thread durch deine Antwort nicht hochgepusht, wäre ich nicht dazu gekommen =D

MfG
Angehängte Dateien
Dateityp: txt Interessante Wahrscheinlichkeitsaufgabe.txt (928 Bytes, 5x aufgerufen)
lone.wolf ist offline   Mit Zitat antworten
Alt 04.11.11, 15:12   #34 (permalink)
 
Registriert seit: 25.09.05
elite-noob Leistung: Facit NTK
elite-noob eine Nachricht über ICQ schicken
Likes: 2
Standard

Hallo zusammen,

nachdem mir Aktuell die Finger Jucken und ich wieder bissle was Programmieren will bin ich gerade dabei mich an der zweiten Thread Leiche zu vergehen (die Dritte kuck ich mir schon an)

Spontan hätte ich gesagt, Spieler B liegt im Vorteil, weil ich die Chancen mit 3 Würfel mehr als 10 zu Würfeln höher einschätze als weniger zu Würfeln. ABER, wir werden sehen ;-)

Das Programm zur Lösung (wenn es nur darum geht wer im Vorteil ist) ist relativ schnell und Simpel geschrieben, ich möchte (Werde) das ganze noch mit Geld machen, bin mir aber ncoh nicht sicher wie ich das Umsetzten soll (hat spieler A jede Runde 10€ neues Startkapital, oder gibt es nur einmal 10€, je nachdem wie ich mich entscheide werde ich das ganze Programmieren.)

Auf jeden Fall habe ich das ganze für die Simple Variante schon umgesetzt und dazu sieht mein Code wie folgt aus:

Simulation in Powershell
Code:

cls
$rand=New-ObjectSystem.Random
$SpielerA= 0
$SpielerB= 0
$Unentschieden= 0
$Runden= 10000000
$Counter= 1
$Ergebniss= 1
while ($Counter-le$Runden)
{
write-host$Counter
$Schleife= 1
while ($Schleife-le 3)
{
$Schleife++
$Würfel=$rand.next(1,6)
$Ergebniss=$Ergebniss+$Würfel
}
IF ($Ergebniss-lt 10)
{
$SpielerB++
}
ElseIF ($Ergebniss-gt 10)
{
$SpielerA++
}
Else
{
$Unentschieden++
} 
$Ergebniss= 0
$Counter++
}
IF ($SpielerA-gt$SpielerB)
{
Write-Host"Spieler A ist im Vorteil"
Write-Host"Spieler A: "$SpielerA
Write-Host"Spieler B: "$SpielerB
}
ElseIF ($SpielerB-gt$SpielerA)
{
Write-Host"Spieler B ist im Vorteil"
Write-Host"Spieler A: "$SpielerA
Write-Host"Spieler B: "$SpielerB
}
Else
{
Write-Host"Unentschieden"
}
Die Ausführung hat ein wenig gedauert, 10.000.000 Durchläufe sind wohl doch ein wenig viel ;-)

Aber Gewonnen hat

*Trommelwirbel*
Spieler B ist im Vorteil
Spieler A: 2798223 Gewonnene Spiele
Spieler B: 5761321 Gewonnene Spiele

greetz
chris
elite-noob ist offline   Mit Zitat antworten
Alt 04.11.11, 18:27   #35 (permalink)
 
Benutzerbild von Sleepprogger
 
Registriert seit: 17.10.09
Sleepprogger Leistung: Facit NTK
Likes: 10
Standard

Da ich gerade sowieso warten muss (vc++ compiler braucht etwas )
hier meine Lösung in Java mit Nutzung des Mittelwertes.

Code:
        /*
         * Ermitteln wieviele moegliche Kombinationen es pro Wert gibt
         */
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();    // Hier koennte man auch nen Array nehmen, (zu faul ;))
        int max = 6;    // bestimmt die Seiten der Wuerfel
        double toPay = 10;    // hier kann angegeben werden wieviel pro Spiel bezahlt wird
        int count = (int) Math.pow(max, 3);
        int old;
        for (int i = 1; i <= max; i++) {
            for (int j = 1; j <= max; j++) {
                for (int j2 = 1; j2 <= max; j2++) {
                    old = map.get(i+j+j2)!=null?map.get(i+j+j2):0;
                    map.put(i+j+j2, old+1);                    
                }
            }
        }
        
        /*
        * Gewichteter Mittelwert und Ergebnis bilden
        */
        double avg = 0;
        for (Entry<Integer, Integer> entry : map.entrySet()) {
            avg += entry.getValue() * entry.getKey();
        }
        avg /= count*1.0;
        System.out.println("Average: " + avg);
        System.out.println("Average result: " + (avg - toPay));
__________________
Anonymisierungsdienste I
Send from my PC using Firefox...
Sleepprogger ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Glückspielvorteil
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61