problem mit schleifen in schleifen



  • hallo alle beisamen!
    zuvor wünsch ich euch einen guten rutsch ins neue jahr, hoffentlich stürzen unsere pc's nicht ab, 2000 hat man sich ja auch so riesen sorgen gemacht!
    😉
    zu meinem problem:

    for (a=1;a<7;a++)
        {
              for (b=1;b<7;b++)
              {
                    for (c=1;c<7;c++)
                    {
                          if (1/a + 1/b + 1/c == 1 && a + b + c == 11)
                          {
                             cout<<a<<" - ";
                             cout<<b<<" - ";
                             cout<<c<<" - \n";
                          }
                          else
                          {
                              cout<<"no result found!\n";
                          }
                    c++;
                    }
              b++;
              }
    

    also also müsste jede schleife insgesamt 6 mal durchlaufen!
    das müsste mir ja dann 6³-6 zeilen "no result found" ergeben, und 6 zeilen mit:
    2 - 3 - 6
    2 - 6 - 3
    3 - 2 - 6
    3 - 6 - 2
    6 - 2 - 3
    6 - 3 - 2

    jedoch erscheinen deutlich weniger zeilen, und die ergebnisse, die das prog findet sind folgende:
    1 - 5 - 5
    5 - 1 - 5
    5 - 5 - 1

    ?!?!?!?! 😕 😮 😡

    was ist falsch am code?

    noch zusätzlich der ganze code, fals jemand es nachprüfen will:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int a, b, c;
    
        system("CLS");
        cout<<"\n";
        for (a=1;a<7;a++)
        {
              for (b=1;b<7;b++)
              {
                    for (c=1;c<7;c++)
                    {
                          if (1/a + 1/b + 1/c == 1 && a + b + c == 11)
                          {
                             cout<<a<<"\n";
                             cout<<b<<"\n";
                             cout<<c<<"\n";
                          }
                          else
                          {
                              cout<<"no result found!\n";
                          }
                    c++;
                    }
              b++;
              }
        a++;
        }
        system("PAUSE");
    
    }
    


  • Du inkrementierst die Laufvariablen 2 mal:

    for (a=1;a<7;[b]a++[/b])
        {
              for (b=1;b<7;[b]b++[/b])
              {
                    for (c=1;c<7;[b]c++[/b])
                    {
                          if (1/a + 1/b + 1/c == 1 && a + b + c == 11)
                          {
                             cout<<a<<"\n";
                             cout<<b<<"\n";
                             cout<<c<<"\n";
                          }
                          else
                          {
                              cout<<"no result found!\n";
                          }
                    [b]c++[/b];
                    }
              [b]b++[/b];
              }
        [b]a++[/b];
        }
    


  • omg!!!
    XD
    danke, dass du mir das brett vorm kopf weggeschlagen hast!
    mal schaun, ob es jetzt richtig wird!
    😃



  • hmm...
    also die zeilenanzahl stimmt jetzt wahrscheinlich, hab nicht alle gezählt...
    😉
    aber er gibt mir folgende lösungen:
    1 - 5 - 5
    und
    1 - 4 - 6

    ???
    ist doch beides größer als eins!
    und wenn er rundet, dann müssten ja noch mehr lösungen kommen.
    😕



  • Der Ausdruck "1/a" wird als Ganzzahl-Division verstanden, du möchtest jedoch mit Brüchen rechnen.
    Du könntest jetzt mit float oder double arbeiten, hättest dann aber mit Rundungsfehler zu kämpfen.
    Besser ist es, du formst die Formel so um, daß sie mit Hilfe von ganzen Zahlen berechnet werden kann:

    1/a + 1/b + 1/c == 1
    
    <->
    
    b*c + a*c + a*b == a * b * c
    


  • ah danke! nun funktioniert es!
    😃
    👍
    na dann ein frohes neues!!


Anmelden zum Antworten