Berechnung mit Arrays



  • Hallo liebe Community,
    ich habe die Aufgabe im Praktikum bekommen einen Alghoritmus zu schreiben der momentan mit 3 unterschiedlichen Zahlen(es dürfen maximal 4 Zahlen verwendet werden) so viele Kombinationen z.B. 1, 5 und 8 zu finden
    Mit 1,5 und 8 komme ich von 1-26 ohne Lücken z.B. für 12 soll das Programm dann nicht 8 + 8 = 16! - 8 = 8 + 5 = 13! - 5 = 8 + 1 + 1 + 1 + 1 = 12 rechnen (mein Array läuft von hinten nach vorne) sondern dann direkt mit 5 anfangen um so
    5 + 5 + 1 + 1 =12 zu erreichen da ich ja nur 4 zahlen verwenden darf. Das funktioniert auch schon ganz gut da ich dies schon in mein Programm implementiert habe jedoch funktioniert dies bei der 26 nicht er soll 8 + 8 + 5 + 5 = 26 rechnen, rechnet jedoch : 8 + 8 + 8 + 8 - 8 + 5 - 5 + 1 + 1 was wieder zu viel ist im zweiten Durchgang benutzt er die 5 von Anfang an was mich aber auch nicht zum Ziel führt da ich mehr als 4 Marken benutzen muss... Ich Poste hier mal meinen jetzigen Code und hoffe das mir jemand helfen kann... Danke schonmal 😕

    static void Main(string[] args){
    darstellbar(26, new int[] { 1, 5, 8 });
    }
    public static void darstellbar(int zahl, int[] marken){
          for (int i = marken.Length; i > 0;){
            int begrenzungVierMarken = 0;
            int summe = 0;
            for (int j = i- 1; j >= 0; j--){ //Zuständig um eine Zahl weiter zu gehen sollte sie zu groß sein                    
              for (int k = j; k >= 0;){//Wird so oft ausgeführt bis die Zahl überschritten ist oder sie erreicht wurde
                if (summe < zahl){//Wenn die Summe niedrieger ist als die Zahl, wird draufgerechnet
                  Console.WriteLine(summe + " plus " + marken[j]);
                  summe += marken[j];
                  begrenzungVierMarken += 1;
                }
                else if (summe > zahl){//Wenn die Summe größer ist als die Zahl wird sie wieder abgezogen und die for-Schleife unterbrochen
                  Console.WriteLine(summe + " minus " + marken[j]);
                  summe -= marken[j];
                  begrenzungVierMarken -= 1;
                  break;
                }
                else if (summe == zahl){//Wenn die Summe die Ausgangszahl erreicht hat wird die for-Schleife unterbrochen
                  Console.WriteLine(summe);
                  break;
                }
              }
            }
            if(begrenzungVierMarken >4){
              i--;
              Console.WriteLine("Es wurden zuviele Marken benutzt, ich probiere es nochmal");
            }else{
              break;
            }
          }
        }
    

  • Mod

    Das Problem ist halt, das, wenn wir bei 8+8+8=24 angekommen sind, gilt, dass sowohl 24+8 als auch 24+5 größer als 26 sind. In das Problem läufst du, weil du immer zuerst die gleiche Marke ausprobierst, die du zuletzt genommen hast. Dabei gibt es aber keinen objektiven Grund für diese Vorgehensweise. Du solltest zuerst immer die kleinste Marke ausprobieren.



  • SeppJ schrieb:

    Das Problem ist halt, das, wenn wir bei 8+8+8=24 angekommen sind, gilt, dass sowohl 24+8 als auch 24+5 größer als 26 sind. In das Problem läufst du, weil du immer zuerst die gleiche Marke ausprobierst, die du zuletzt genommen hast. Dabei gibt es aber keinen objektiven Grund für diese Vorgehensweise. Du solltest zuerst immer die kleinste Marke ausprobieren.

    Mhh... Meine Idee war jetzt eher das ich mein Programm ein wenig umgestalte das es erst alle Möglichkeiten mit einer 8 also zuerst 8 + 5 + 5 + 5 und später dann sollte es nicht klappen 8 + 8 + 5 + 5 und so weiter.
    Mit der kleinsten Zahl anzufangen wäre nicht so vorteilhaft und ich würde auch gerne erklären warum aber da spielt sich grade sehr viel in meinem Kopf ab was das Programm angeht und ich würde eher verwirren.


  • Mod

    Du kannst es auch gerne anders lösen, meines ist nur ein möglicher Vorschlag, wie du ohne viel Denken zum Ziel kommen kannst. Hauptsache, du verstehst das Problem am jetzigen Ansatz.



  • SeppJ schrieb:

    Du kannst es auch gerne anders lösen, meines ist nur ein möglicher Vorschlag, wie du ohne viel Denken zum Ziel kommen kannst. Hauptsache, du verstehst das Problem am jetzigen Ansatz.

    Ich bin für jede Art der Hilfe dankbar und deshalb danke das du dir mein Anliegen durchgelesen hast und etwas dazu geschrieben hast ist ja alles freiwillig hier 🙂
    Ja ich verstehe was mein momentanes Problem ist und zwar komme ich mit meinem momentanen Lösungsweg nicht weit da mein Programm erst die 8er ausprobiert sie dann jedoch komplett weglässt und alles mit der 5 versucht und so weiter... Deshalb bin ich momentan noch damit beschäftigt mir einen anderen weg auszudenken und habe da erstmal genug zu tun 😃 deshalb danke für jegliche Art von Tipps 👍


Log in to reply