Schleifen reduzieren für Systemwettenberechnung / Kombinatorik

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Schleifen reduzieren für Systemwettenberechnung / Kombinatorik

    Hallo, ich bräuchte mal wieder eure Hilfe.
    Zum Vorhaben:
    Ich möchte mir einen Systemwettenrechner (also Gewinnberechnung bei beispielsweise 3 aus 7 gewonnen Wetten, bei vorgegebenem Wetteinsatz pro Wette ) schreiben, bzw. habe ich schon und alles funktioniert. Nun möchte ich jedoch noch wenn möglich den Code optimieren.

    Mein Rechner kann die Systemwetten 2 (bis 10 ) aus 2 (bis 10) berechnen. Mehr brauche ich nicht.

    Hier mal der Code der Berechnung 2 aus x bis 4 aus x. Mit jeder Erhöhung wird also eine Schleife mehr benötigt. Nun Frage ich mich ob man diese Berechnung nicht in einer einzigen Schleife (als Funktion, die sich selbst aufruft und die nötigen Parameter übergibt bekommt) erledigt bekommt? Da ich Mathe nur bis zur 10 Klasse hatte fehlt mir der nötige Background um bei einer Suche im Netz das richtige Stichwort zu benutzen...

    VB.NET-Quellcode

    1. ​Select Case SystemWette
    2. Case 2 ' 2 aus x
    3. For a As Integer = 0 To Quoten.Length - SystemWette ' Jede Quote durchlaufen (-1 wegen Index 0 ) - Außer die Anzahl an Benötigten Wetten, weil die am Ende nicht mehr kombiniert werden können.
    4. For b As Integer = a + 1 To Quoten.Length - 1
    5. Gewinn += Quoten(a) * Quoten(b) * EinsatzProWette
    6. Next
    7. Next
    8. Case 3 ' 3 aus x
    9. For a As Integer = 0 To Quoten.Length - SystemWette
    10. For b As Integer = a + 1 To Quoten.Length - 2
    11. For c As Integer = b + 1 To Quoten.Length - 1
    12. Gewinn += Quoten(a) * Quoten(b) * Quoten(c) * EinsatzProWette
    13. Next
    14. Next
    15. Next
    16. Case 4 ' 4 aus x
    17. For a As Integer = 0 To Quoten.Length - SystemWette
    18. For b As Integer = a + 1 To Quoten.Length - 3
    19. For c As Integer = b + 1 To Quoten.Length - 2
    20. For d As Integer = c + 1 To Quoten.Length - 1
    21. Gewinn += Quoten(a) * Quoten(b) * Quoten(c) * Quoten(d) * EinsatzProWette
    22. Next
    23. Next
    24. Next
    25. Next
    26. End Select


    Noch eine Anmerkung: Die Schleifen könnte ich auch komplett bis "Quoten.Length - 1" durchlaufen lassen, das Ergebnis wäre immer noch richtig, würde aber (wahrscheinlich unmerklich) länger dauern...
    @Humax Vielleicht so:
    Der 10er ruft 10 Mal den 9er auf.
    Der 9er ruft 9 Mal den 8er auf.
    Der 8er ruft 8 Mal den 7er auf
    ...
    der niedrigste macht dann alles selbst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!