Alle Zahlenkombinationen durchgehen mittels Addieren um zu Überprüfen ob man auf bestimmte Werte kommt

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Torres87.

    Alle Zahlenkombinationen durchgehen mittels Addieren um zu Überprüfen ob man auf bestimmte Werte kommt

    Hallo,

    Sagen wir mal ich hab in der Spalte A1 bis A100 Zahlen stehen, als Rechenoperation steht lediglich das Addieren zur Verfügung, man darf alle Zahlen miteinander kombinieren d.h alle irgendwie miteinander addieren um an Ende gerade Tausender-Ergebnisse zu erhalten ( 1000,2000,3000 bis 10000 )

    Als Ergebnis soll das Programm die Lösungskombination ausgeben!


    DAnke

    Torres87 schrieb:

    A1 bis A100

    Wie lange soll das Programm denn brauchen?
    n aus k ohne Beachtung der Reihenfolge: n! / (k! * (n-k)!)

    Bsp. Lotto: 6 aus 49 ohne zurücklegen und ohne Beachtung der Reihenfolge. Ca. 13 Mio Möglichkeiten.

    Bei dir - falls ich mich nicht verrechnet habe - sind es ca 10^158 verschiedene Möglichkeiten, die Zahlen zu kombinieren.

    EDIT: Doch verrechnet. Sind nur 10^30 Möglichkeiten ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()

    Torres87 schrieb:

    Er soll sowieso maximal nur 20-25 Zahlen damit überprüfen ob da was klappt

    Und das heißt genau?
    20 aus 100 ohne Beachtung der Reihenfolge: 5 * 10^20 verschiedene Kombinationen. Wenn man pro Sekunde 1 Mrd Komb. prüfen könnte (10^9 Hz) würden immer noch 5*10^11 Sekunden benötigt werden.

    Irgendwie scheinst du dir über die Komplexität noch wenig Gedanken gemacht zu haben? Wozu soll das ganze überhaupt dienen, wenn man fragen darf?
    Ich empfehl dir mit was kleinem anzufangen, weil sowas großes kann schnell zu Programmierfehlern führen

    Hä? Die Aufgabe ist nicht schwer zu programmieren, sie killt als Brute-Force-Aufgabe nur jede Komplexitätsgrenze.
    Oh, Entschuldigung, ich hab übersehen, dass Du wieder Deine morgendliche "Ich schreibe mal überall was"-Runde machst...

    Aber mir ist aufgefallen, dass ihr (also Torres und Pico) eventuell aneinander vorbeiredet: ich habe die Aufgabenstellung so verstanden, dass alle Zahlen (100 an der Zahl) miteinander addiert werden und dann geprüft wird, ob diese glatte Tausenderwerte liefern. Ich denke aber mal, dass da immer nur Zweierkombinationen möglich sind und nicht alle Kombinationen. Stimmt das Torres? Also wenn ich z.B. 100, 123, 777 habe, dann kann ich keine 1000er-Kombination bilden, weil ich nur zwei miteinander addieren darf und nicht alle drei Zahlen. Oder irre ich mich da?
    Wenn ich mich nicht irre, ist das durchaus schnell ausgerechnet, hier ein Beispiel mit Zufallszahlen:

    VB.NET-Quellcode

    1. Dim Random As New Random
    2. Dim a(100) As Integer
    3. For i As Integer = 0 to a.Length -1
    4. a(i) = Random.Next(10000)
    5. Next
    6. For i As Integer = 0 To a.Length - 1
    7. For j As Integer = i To a.Length - 1
    8. If (a(i) + a(j)) Mod 1000 = 0 Then
    9. Console.WriteLine(a(i) & " und " & a(j) & " ergeben " & (a(i) + a(j)))
    10. End If
    11. Next
    12. Next


    Gruß FatFire

    PS: Falls eine Zahl nicht mit sich selbst addiert werden soll, muss die innere For-Schleife natürlich ab i+1 anfangen zu zählen.
    Du sagst es, 100 an der Zahl

    Ach, ich könnt speien, bin momentan wieder hauptsächlich unter Java unterwegs. Da fällt es immer ein wenig schwer, schnell umzuswitchen. Ist aber auch eine doofe Eigenart, die da an VB haftet. Wenn Microsoft das wenigstens mal durchgängig durchgezogen hätte, dann wäre es ja nicht so schlimm, aber in VB so und in C# wieder allgemeinkonform...*kotz*

    Gruß FatFire
    mmmh also ich versuchs mal genau zu erklären.

    Sagen wir mal ich habe die Zahlen:
    757
    2650
    784
    597
    147


    Aus denen Zahlen soll das Programm irgendwie versuchen auf 1000 oder 2000 oder 3000 oder 4000...bis 10000 ( gerade tausender ), als rechenoperation gilt nur das Addieren.

    Entweder nutzt das Programm alle zahlen um auf das Ergebnis zu kommen oder es nutzt halt nur einige von den Zahlen.

    Wenn ich das richtig sehe, muss ja das Programm alle möglichen Kombinationen durchrechnen um das Ergebnis zu erhalten?!

    Das A1 bis A100 habe ich einfach nur genannt da ich wusste, dass er mit sehr vielen Zahlen sehr lange braucht!

    Torres87 schrieb:

    ntweder nutzt das Programm alle zahlen um auf das Ergebnis zu kommen oder es nutzt halt nur einige von den Zahlen.

    Womit wir wieder bei der von mir genannten Zahl von rund 1.000.000.000.000.000.000.000.000.000.000 Kombinationsmöglichkeiten wären. Nach welchem System willst du da irgendwas ausschließen um nicht den gesamten Raum durchsuchen zu müssen?
    Hm...eventuell würde es was bringen die Zahlen zu kategorisieren? Z.B. Gerade/Ungerade, über/unter 500, etc. und dann nur die Kombinationen zu testen, die auch Sinn machen (ich brauche nicht drei ungerade Zahlen zusammenschmeissen, wenn ich auf eine Gerade kommen möchte). Aber das dürfte dann wohl immer noch viel zu viel Aufwand bedeuten.

    Gruß FatFire

    picoflop schrieb:

    Torres87 schrieb:

    ntweder nutzt das Programm alle zahlen um auf das Ergebnis zu kommen oder es nutzt halt nur einige von den Zahlen.

    Womit wir wieder bei der von mir genannten Zahl von rund 1.000.000.000.000.000.000.000.000.000.000 Kombinationsmöglichkeiten wären. Nach welchem System willst du da irgendwas ausschließen um nicht den gesamten Raum durchsuchen zu müssen?
    Wer sagt was ausschließen, dann soll er halt alle durchrechnen

    Wie gesagt mehr als 20-25 Zahlen werde ich nicht durchlaufen lassen, wie lange würde das dauern bei einem Quadcore mit 8GB-Ram :D