Möglichkeiten 6 aus 49 bzw. 49 über 6
-
Hallo, bin neu hier und hoffe ihr könnt mir helfen.
Wir sollen ein Program mit C schreiben, das alle Möglichkeiten des Binomialkoeffizienten von 49 über 6 in eine Datei schreibt (ich weiss das wird eine ziemlich große Datei, aber die Aufgabe ist so)
Also in der Form des hochzählens der Möglichkeiten (1 2 3 4 5 6, 2 1 3 4 5 6 oder 1 2 3 4 5 6, 1 2 3 4 5 7, 1 2 3 4 5 8 usw.)mit verschachtelten for Schleifen. Ich dachte auch schon an ein Array mit for Schleifen, mit if Bedingungen sind wir nämlich nicht wirklich weit gekommen. aber ich komme nach vielem rumprobieren zu keiner funktionierenden Lösung, wie gesagt ich lerne programmieren auch gerade erst mit C und kann auch keine andere Programmiersprache. Vielen Dank schon mal für eure Hilfe
-
painkiller schrieb:
Hallo, bin neu hier und hoffe ihr könnt mir helfen.
Wir sollen ein Program mit C schreiben, das alle Möglichkeiten des Binomialkoeffizienten von 49 über 6 in eine Datei schreibt (ich weiss das wird eine ziemlich große Datei, aber die Aufgabe ist so)
Also in der Form des hochzählens der Möglichkeiten (1 2 3 4 5 6, 2 1 3 4 5 6 oder 1 2 3 4 5 6, 1 2 3 4 5 7, 1 2 3 4 5 8 usw.)mit verschachtelten for Schleifen. Ich dachte auch schon an ein Array mit for Schleifen, mit if Bedingungen sind wir nämlich nicht wirklich weit gekommen. aber ich komme nach vielem rumprobieren zu keiner funktionierenden Lösung, wie gesagt ich lerne programmieren auch gerade erst mit C und kann auch keine andere Programmiersprache. Vielen Dank schon mal für eure Hilfe
W0 liegt das Problem ?
Datei öffnen/ schreiben ?
-
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.