Zum Inhalt springen

Snooker-Aufgabe


Playa

Empfohlene Beiträge

Hallo,

ich habe mir den Kopf zerbrochen um diese Schulaufgabe zu lösen, jedoch ohne Erfolg. Ich hoffe dass mir einer von Ihnen weiterhelfen kann.

Die Aufgabe soll in der Programmiersprache C programmiert werden.

Kann mir jemand Lösungsansätze bzw. Algorithmusvorschläge nennen?

Die Aufgabe lautet wie folgt:

Auf einem Snookertisch befinden sich 15 rote Kugeln und jeweils eine gelbe, grüne, braune, blaue, pinke und schwarze Kugel. Diese werden auch farbige Kugeln genannt. Die roten Kugeln haben eine Wertigkeit 1 und die Farbigen die Wertigkeit 2 bis 7 (in der genannten Reihenfolge). Ziel von Snokker ist es, so viele Kugeln wie möglich hintereinander einzulochen. Dabei muss abwechselnd immer eine rote gefolgt von einer farbigen Kugel gespielt werden. Die Farbigen werden nach dem Lochen wieder auf den Tisch zurückgelegt.

Als Eingabe wird eine mögliche Punktzahl übergeben. Geben Sie alle Varianten der Reihenfolgen an, in welchen die Kugeln eingelocht werden müssen, um genau diese Punktzahl zu erreichen. Dabei sollen die Permutationen von möglichen Reihenfolgen nur einmal berücksichtigt werden.

z.B.: Eingabe = 8

1. rot schwarz

2. rot pink rot

3. rot braun rot gelb

4. rot gelb rot braun !!!Diese Permutation nicht anzeigen; siehe 3.!!!

5. rot grün rot grün

Link zu diesem Kommentar
Auf anderen Seiten teilen

ist doch easy ...

172 ist ja max glaube ich,

int i,rote=15,hilfe=1;

for (i=0;eingabe<=172 || eingabe >=1;i++)

if hilfe ==1

{eingabe - 1;

PRINTF("rot ");

hilfe =0;

rote -=1;

}

if hilfe ==0

{

.....

usw.

So einfach wird es wohl doch nicht sein, schließlich will er alle Möglichkeiten ermitteln wie man einen bestimmten Wert erreichen kann ... das schreit nach Rekursion.

Die Aufgabe schon gelöst, Playa?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ne, ich habe es iterativ gemacht; und zwar mit 15 ineinander verschachtelten Schleifen; in der ersten Schleife werden Kombinations- möglichkeiten ermittelt, wenn eine farbige Kugel verwendet wird, in der 2. Schleife wenn 2 farbige Kugeln verwendet werden usw. bis schließlich in der 15 Schleife alle möglichen Kombinationen ermittelt werden, wenn 15 farbige Kugeln verwendet.

Wie man es rekursiv programmieren könnte, wüsste ich gar nicht bzw. mir ist keine gescheite Idee eingefallen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier ist meine rekursive Lösung. Müsste halt noch kommentiert werden. Mach ich vielleicht später noch, wenn ich Zeit habe ;)

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

typedef vector<int> sequence;

void recurse(vector<sequence>& result, sequence& s, int lowestball, int score)
{
switch(score)
{
case 0:
result.push_back(s);
break;
case 1:
if(s.size() < 30)
{
s.push_back(1);
result.push_back(s);
}
break;
case 2:
// geht nicht
break;
default:
if(s.size() < 30)
{
s.push_back(1);
--score;
int maxball = min(score, 7);
for(int i=lowestball; i<=maxball; ++i)
{
sequence test(s);
test.push_back(i);
recurse(result, test, i, score - i);
}
}
}
}

int main()
{
for(int i=1; i<=120; ++i)
{
vector<sequence> result;
sequence s;
recurse(result, s, 2, i);
cout << "Score: " << i << " No. of sequences: " << result.size() << '\n';
}
}[/CODE]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...