Java :: Aufgabe #123

3 Lösungen Lösungen öffentlich

Gute Wette oder schlechte Wette?

Anfänger - Java von hollst - 23.06.2016 um 19:12 Uhr
Ich finde, eine interessante Aufgabenstellung sollte immer mit einer kleinen Geschichte verbunden sein. Ansonsten wird die Aufgabenstellung in der Allgemeinheit mit "rein theoretische" oder "für das Leben uninteressant" abgestempelt. Nun gut, die Mathematik fragt nicht danach, ob irgendeine Aufgabenstellung für das Leben "interessant" ist, für sie sollte eine Aufgabenstellung "an sich" interessant sein, unabhängig vom paktischen Wert. Aber lassen wir das Philosphieren beiseite und kommen zu der Geschichte:

Du hast einen spielsüchtigen Mitbürger getroffen, nennen wir ihn den Banker. Nach einiger Zeit schlägt dir der Banker ein einfaches Würfelspiel vor: du gewinnst, wenn eine gerade Zahl fällt, er, wenn eine ungerade Zahl gefallen ist. Du bist nicht spielsüchtig und erwiders, dass du an einem solchen Spiel, bei dem die Chancen 50 zu 50 stehen, kein Interesse hast. Gewinnen tut nur der, der mehr Glück hat und auf so etwas vertraust du nicht.

Der Banker bleibt hartnäckig. Er schlägt dir vor, dass du nicht nur gewinnst beim Fallen einer geraden Zahl, sondern zusätzlich, wenn die Eins fällt. Hiermit bist du einverstanden, denn deine Chancen sind mit etwa 67 zu 33 wesentlich besser. Doch der Banker sagt: "Halt! Mir ist natürlich klar, dass Du in diesem Fall die bessere Position hast. Als Ausgleich bekommst du im Falle eines Gewinnes aber auch nur 4/6 der Tischgeldes ausgezahlt, der Rest geht an mich zurück." Deine Antwort: "Na, dann sind wir ja wieder wie zu Beginn, ich habe kein Interesse."

Der Banker bleibt am Ball: "Okay, im Falle eines Gewinnes bekommst du nicht nur 66,666... % sondern sogar 70 % des Tischgeldes. Den kleinen Nachteil werde ich mit meinem glücklicheren Händchen schon wieder ausgleichen." Gut, das ist dir plausibel und das Spile geht los.

Jetzt zur Aufgabenstellung: Ist es in der Tat wahr, dass du mit den 70 % (leicht) im Vorteil gegenüber dem Banker bist? Zur Beantwortung der Frage gibt es im Prinzip zwei Wege, den experimentellen und den theoretischen. Wir wollen den experimentellen Weg wählen (Simulation). Sowohl du als auch der Banker haben in jeder Runde ein Grundgeld von 100 €. Der Einsatz bei jeder Würfelung sein 1 € und eine Runde geht über 100 Würfe (somit brauchst du im dümmsten Fall, falls du wirklich jeden der 100 Würfe einer Runde verlieren solltest, trotzdem keine Bankrotterklärung abgeben). Die Frage lautet: Wie oft hast du im Mittel am Ende einer 100-Würfe-Runde mehr als deine 100-€-Startgeldmenge auf deiner Seite?

PS: Falls dir dein Simulationsergebnis irgendwie komisch vorkommt, versuche doch durch Überlegung (theoretischer Weg) herauszubekommen, ob deine Simulation nicht doch richtig sein könnte.


Lösungen:

vote_ok
von manoloForead (390 Punkte) - 11.07.2016 um 23:57 Uhr
Quellcode ausblenden Java-Code
import java.util.Random;

public class main { 
    
    public static void main (String[] args) {
        
        Random r = new Random();
        double myMoney, win = 0, spiele = 100000, quote;
        
        for (int z = 0; z < spiele; z++) {
            myMoney = 100;
            for (int i = 0; i < 100; i++) {
                myMoney--;
                int wurf = r.nextInt(6) + 1;
                if(wurf == 1 || wurf == 2 || wurf == 4 || wurf == 6) {
                    myMoney += 0.7 * 2;
                }
            }
            if (myMoney > 100)
                win++;
        }
        quote = win / spiele * 100;
        System.out.println("Siege: " + (int) win + " von " + (int) spiele + " Spielen. Quote: " + String.format("%.2f",quote) + " %");
        
    }
    
} 
vote_ok
von thet1983 (800 Punkte) - 26.09.2016 um 11:54 Uhr
Quellcode ausblenden Java-Code
import java.text.DecimalFormat;

/**
 * Die Wette 
 * @author Etzelsdorfer Thomas
 */
public class DieWette {
    static DecimalFormat f = new DecimalFormat("#.##");
    static int counterVerloren = 0;
    static int counterGewonnen = 0;
    static int counterHoeher100 = 0;
    static int geworfeneZahl = 0;
    static int anzahlWuerfe = 0;
    static int maxWuerfe = 100;

    static double geld = 100;
    static int einsatz = 1;
    
    /*
     * Ablauf der Simulation 
     */
    public static void main(String[] args) {
        DieWette wette = new DieWette();
        // Werfe
        while(anzahlWuerfe < maxWuerfe){
            anzahlWuerfe++;
            geworfeneZahl = wette.werfe();
            wette.berechneGeld(geworfeneZahl);            
        }
        // Ausgaben wenn Würfe erreicht
        System.out.println("\n\nWie oft war ich über die € 100,- [ "+counterHoeher100+" ]");
        System.out.println("Wie oft habe ich gewonnen [ " + counterGewonnen + " ]");
        System.out.println("Wie oft habe ich verloren [ " + counterVerloren + " ]\n\n");
    }

    // Würfelwurf 
    public int werfe(){
        return (int)(Math.random() * 6) + 1;
    }
    // Berechnung
    public void berechneGeld(int wurfZahl){
        double gewinn = einsatz / 1.7;
        switch(wurfZahl){
            case 1:
            case 2:
            case 4:
            case 6:
                counterGewonnen++;
                geld += gewinn; 
                System.out.println("MEINWURF: [GEWONNEN] "+wurfZahl+" wurde geworfen, Aktueller Stand: € " + f.format(geld));
                break;
            default:
                counterVerloren++;
                geld -= einsatz;
                System.out.println("MEINWURF: [VERLOREN] " + wurfZahl + " wurde geworfen, Aktueller Stand: € " + f.format(geld));
        }
        if(geld > 100){
            counterHoeher100++;
        }
    }
}
vote_ok
von Tolot (100 Punkte) - 26.11.2016 um 21:50 Uhr
Nette Wette!
Der Banker weiß, was er tut, da er pro eingesetztem Euro 1,066 Euro erwarten kann.

Ohne es zu sehr auszuarten, habe ich beiden Teilnehmern von vornheirein den Wetteinsatz genommen.
Quellcode ausblenden Java-Code
public class Wette {

	public static boolean Ego_wuerfeln() { 
		int wurf = (int) (Math.random()*5+1);
		if (wurf == 3 || wurf == 5) {
			//Man hätte den Würfel auch mit anderen Augen beschriften können
			return false;
		}
		else
			return true;		  
	}
	
	public static void main(String[] args) {
		// Da 100x gewürfelt wird, beträgt der Einsatz jeweils 50 
		double Ego_geld = 50;
		double Banker_geld = 50;
		for (int i = 1; i <= 100; i++) {
			if (Ego_wuerfeln()) {
				Ego_geld = Ego_geld + 0.7;
				Banker_geld = Banker_geld + 0.3;
			}
			else {
				Banker_geld = Banker_geld + 1;
			}
		}
		System.out.println("Ergebnis:");
		System.out.println("Eigenes Geld: " + Ego_geld);
		System.out.println("Des Bankers Geld: " + Banker_geld);
	}
}

Zitat:

Ergebnis:
Eigenes Geld: 95.50000000000018
Des Bankers Geld: 104.49999999999982

1810773

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.