Möglichkeiten 6 aus 49 bzw. 49 über 6



  • reduziere dein Problem auf 2 aus 5 mit Bildschirmausgabe, versuch's mal mit zwei verschachtelten for-Schleifen und schau nach wo der Dreh ist.



  • Probier es mal mit Rekursion.



  • Bitsy schrieb:

    reduziere dein Problem auf 2 aus 5 mit Bildschirmausgabe, versuch's mal mit zwei verschachtelten for-Schleifen und schau nach wo der Dreh ist.

    hi,

    ich habe das jetzt mal so gemacht. Aber ich bekomme das nicht hin das er nur die beiden Zahlen mit den möglichen 10 Kombinationen ausspuckt. Kannst Du mir noch einen Tipp geben, im Prinzip kann das ja nicht so schwer sein... 😞

    #include <stdio.h>
    #include <math.h>
    int main(void)
    {
    int i,j,zaehler;
    //zaehlen 1 bis 5
    for(i=1;i<=5;i=i+1)
    {
    for (j=1;j<=i; j++)
    printf ("%d", j);
    printf ("\n");
    }
    return 0;
    }



  • D-U-D-E schrieb:

    Probier es mal mit Rekursion.

    Kannst Du das etwas genauer erkären?



  • Bei deinem Beispiel können ja keine Zahlenpaare ausgegeben werden.
    Ändere den Quelltext entsprechend.

    Entweder änderst du die printf() zu einem Einzeiler -> schau printf-Formatierung oder setze die Klammern entsprechend.

    MfG f.-th.



  • f.-th. schrieb:

    Bei deinem Beispiel können ja keine Zahlenpaare ausgegeben werden.
    Ändere den Quelltext entsprechend.

    Entweder änderst du die printf() zu einem Einzeiler -> schau printf-Formatierung oder setze die Klammern entsprechend.

    MfG f.-th.

    Hallo, vielen Dank für die Antwort. Jetzt habe ich wieder etwas Zeit und probiere weiter. So habe ich zumindest 10 Zahlenpaare. Jetzt soll er halt aus dem Array heraus kompinieren. Aber wie weiss ich noch nicht so genau...

    #include <stdio.h>
    #include<math.h>
    int main(void)
    {
    int i, j, zaehler, a[5]={1,2,3,4,5};
    {
    for (i=1; i<=10; i++)
    //printf("%d\n",i);
    {
    for (j=1; j<=2; j++)
    printf ("%d",j);
    printf ("\n");
    }
    }

    return 0;
    }

    Vielen Dank schon mal für weitere Tipps



  • painkiller schrieb:

    D-U-D-E schrieb:

    Probier es mal mit Rekursion.

    Kannst Du das etwas genauer erkären?

    Du nimmst eine Zahl aus dem Array und fügst sie deiner Lösungsmenge hinzu. Danach führst du dieselbe Methode auf dem Array ohne diese Zahl wieder aus. Das wiederholst du solange, bis du die gewünschte Größe erreicht hast (in deinem Fall 6).
    Also ungefähr so:

    void fn(int a[] /*Quellarray*/, int z[] /*Zielarray*/)
    {
      for (int i = 0; i < 49; ++i)
      {
        füge a[i] in zielarray ein;
        if (groesse von z < 6)
          fn(a ohne a[i], z);
        else
        {
          gib z aus;
          entferne das zuletzt eingefügte element aus z;
        }
      }
    }
    


  • Paink...
    Was würde folgende Zeile ausgeben?

    printf("%d %d \n", hi, bla);
    

    hi und bla kannst du natürlich an deine Quellcode anpassen 😃

    MfG f.-th.



  • f.-th. schrieb:

    Paink...
    Was würde folgende Zeile ausgeben?

    printf("%d %d \n", hi, bla);
    

    hi und bla kannst du natürlich an deine Quellcode anpassen 😃

    MfG f.-th.

    Hi, vielen Dank für die Antwort, Du meintest sicher :

    #include <stdio.h>
    #include <math.h>
    int main(void)
    {
    int i,j,zaehler;
    //zaehlen 1 bis 5
    for(i=1;i<=5;i=i+1)
    {
    for (j=1;j<=i; j++)
    printf ("%d %d \n",i,j);
    }
    return 0
    }



  • Jetzt dürfte er mit 1 1 beginnen - was ja schon mal unerwünscht ist.
    Danach bringt er 2 1 - willst Du es wirklich so herum geordnet?

    <math.h> wirst Du kaum brauchen für das Problem.
    zaehler wohl auch nicht.

    Wenn Du den nächsten Versuch postest, schau mal auf den Effekt des C/C++ - Tags unter den Smileys unter der Textbox. Benutzung ist obligatorisch.



  • Bitsy schrieb:

    Jetzt dürfte er mit 1 1 beginnen - was ja schon mal unerwünscht ist.
    Danach bringt er 2 1 - willst Du es wirklich so herum geordnet?

    <math.h> wirst Du kaum brauchen für das Problem.
    zaehler wohl auch nicht.

    Wenn Du den nächsten Versuch postest, schau mal auf den Effekt des C/C++ - Tags unter den Smileys unter der Textbox. Benutzung ist obligatorisch.

    Hi, vielen Dank für die Hilfe, so dachtest Du Dir das ?

    #include <stdio.h>
    
    int main(void)
    {
    int i,j;
    //zaehlen 1 bis 5
    for(i=1;i<=5;i++)
        {
        for (j=1;j<i; j++)
         printf ("%d %d \n",j,i);
        }
    return 0;
    }
    


  • D-U-D-E schrieb:

    painkiller schrieb:

    D-U-D-E schrieb:

    Probier es mal mit Rekursion.

    Kannst Du das etwas genauer erkären?

    Du nimmst eine Zahl aus dem Array und fügst sie deiner Lösungsmenge hinzu. Danach führst du dieselbe Methode auf dem Array ohne diese Zahl wieder aus. Das wiederholst du solange, bis du die gewünschte Größe erreicht hast (in deinem Fall 6).
    Also ungefähr so:

    void fn(int a[] /*Quellarray*/, int z[] /*Zielarray*/)
    {
      for (int i = 0; i < 49; ++i)
      {
        füge a[i] in zielarray ein;
        if (groesse von z < 6)
          fn(a ohne a[i], z);
        else
        {
          gib z aus;
          entferne das zuletzt eingefügte element aus z;
        }
      }
    }
    

    Hallo vielen Dank für die Erklärung, werde mich daran versuchen und dann wieder posten.

    PS ein frohes neues Jahr... 🙂



  • Ein wenig kürzer:

    #include <stdio.h>
    
    int main(void)
    {
        int i,j;
    
        for(i=1; i<=5; i++)
            for (j=i+1; j<=5; j++)
                printf ("%d %d \n", i, j);
    }
    

    :xmas2:



  • Nicht nur kürzer, damit hast Du die pain gekillt.
    Jetzt packt er's ja wohl.


Anmelden zum Antworten