Verfügbare Informationen zu "Buchstabensalat -- Hilfe"
Qualität des Beitrags: Beteiligte Poster: Kimi - wirthi - Xin Forum: Tutorials.at Forenbeschreibung: Programmierforum aus dem Unterforum: C / C++ Antworten: 6 Forum gestartet am: Mittwoch 19.04.2006 Sprache: deutsch Link zum Originaltopic: Buchstabensalat -- Hilfe Letzte Antwort: vor 16 Jahren, 3 Monaten, 16 Tagen, 8 Stunden, 10 Minuten
Alle Beiträge und Antworten zu "Buchstabensalat -- Hilfe"
Re: Buchstabensalat -- Hilfe
Kimi - 10.12.2007, 19:31Buchstabensalat -- Hilfe
Hi ich habe folgende Aufgabe auf:
Finden Sie per Algorithmus alle Zahlenkombinationen, die
folgender „Formel“ genügen: EINS + EINS = ZWEI.
Dabei stehen gleiche Buchstaben für gleichen Zahlen und unterschiedliche
Buchstaben für unterschiedliche Zahlen.
Beispiel: 4271 + 4271 = 8542 (E=4, I=2, N=7, S=1, Z=8, W=5)
es gibt 12 Kombinationen.
Zusatz:Der Benutzer kann einen „Satz“ eingeben und der Rechner findet
die entsprechenden Lösungen für die Zahlen.
Code: # include <stdio.h> // Bibos
main(void)
{
// Vars
int bs1=0,bs2=0,bs3=0,bs4=0,bs5=0,bs6=0;
int i1, i2, i3, i4, i5, i6;
int zahl1, zahl2, zahl3, links;
// Eingabeaufforderung
printf("\n\nBuchstabenzahlen\n\n");
// erste Zahl
for (i1=0;i1<10;i1++)
{bs1=i1;for (i2=0;i2<10;i2++)
{bs2=i2;for (i3=0;i3<10;i3++)
{bs3=i3;for (i4=0;i4<10;i4++)
{bs4=i4;for (i5=0;i5<10;i5++)
{bs5=i5;for (i6=0;i6<10;i6++)
{
bs6=i6;
if (bs1!=bs2 && bs2!=bs3 && bs3!=bs4 && bs4!=bs5 && bs5!=bs6 && bs2!=bs4 && bs3!=bs5 && bs4!=bs6 && bs6!=bs1 && bs1!=bs3 && bs1!=bs4 && bs1!=bs5 && bs2!=bs5 && bs2!=bs6 && bs3!=bs6)
{
zahl1=bs1*1000+bs2*100+bs3*10+bs4;
zahl2=zahl1;
links=zahl1+zahl2;
zahl3=bs5*1000+bs6*100+bs1*10+bs2;
if (links==zahl3) {printf("Die Zahlen gehen: %d + %d = %d\n", zahl1, zahl2, zahl3);};
}
}
}
}
}
}
}
getch();
}
So ich habe mal meine Teillösung gepostet aber irgendwas stimmt da nicht mit der if bedingung bzw bs!=bs da habe ich was vedreht deswegen bin ich momentan bissle ratlos.
Eine andere frage wie kann ich eine eingabe des benutzer erfolgen lassen sodass das programm dieses dann auch berechnet.
Danke.
Re: Buchstabensalat -- Hilfe
wirthi - 10.12.2007, 22:45
Hi,
Code: bs2!=5 && bs2!=6 && bs3!=6
Sicher, dass das stimmt? Willst du da nicht Variablen mit Variablen vergleichen?
Frage: wozu brauchst du die bs1-bs6-Variablen überhaupt? Du kannst doch ohnehin die Werte i1-i6 verwenden?
Zur zweiten Teilaufgabe: wie du siehst, lässt sich die Aufgabe (zumindest der erste Teil) so "relativ" einfach lösen. Wirklich gut geht es aber nur mit einen Array. Ich würd für die Lösung sogar zwei Arrayr vorschlagen: eines, in dem du speicherst, welcher Buchstabe welchen Wert hat, und ein Zweites, indem gespeichert ist, welche Buchstaben überhaupt verwendet werden (d.h. im vom benutzer eingegebenen Satz überhaupt vorkommen).
Re: Buchstabensalat -- Hilfe
Kimi - 10.12.2007, 23:39
Ich habe es jetzt abgeändert aber hmmm mit arrays puhh damit tuhe ich mich schwer muss mir das mal im buch anschauen bzw. nochmals durchlesen.
Re: Buchstabensalat -- Hilfe
Xin - 11.12.2007, 00:55Re: Buchstabensalat -- Hilfe
Kimi hat folgendes geschrieben: Hi ich habe folgende Aufgabe auf:
Finden Sie per Algorithmus alle Zahlenkombinationen, die
folgender „Formel“ genügen: EINS + EINS = ZWEI.
Dabei stehen gleiche Buchstaben für gleichen Zahlen und unterschiedliche
Buchstaben für unterschiedliche Zahlen.
Beispiel: 4271 + 4271 = 8542 (E=4, I=2, N=7, S=1, Z=8, W=5)
es gibt 12 Kombinationen.
Redundanter Sourcecode voller Schleifen in abenteuerlicher Formatierung... :-\
Drei Zeichen, dass man die Herangehensweise vielleicht mal überdenken sollte.
Schleifen, die innerhalb von Schleifen ausgeführt werden, verbrauchen massiv Leistung. Du hast 5 Schleifen ineinander verschachtelt. Damit kannst Du problemlos Großrechner lahm legen.
Zur Aufgabe: Du hast einen Haufen Heu, in dem ein paar Nadeln sind.
Ich denke, dass die Aufgabe leichter wird, wenn Du Dich nicht darauf konzentrierst nach Lösungen suchst, lass sie Dir doch einfach in den Schoß fallen, in dem Du Dir ein paar einfachere Aufgaben suchst.
Man kann das ganze Heu einzeln anzufassen und sich die Finger schmutzig machen (siehe Sourcecode) oder sich erstmal einen anständigen Magneten besorgen.
Du hast viele Bedingungen zu erfüllen. Manche sind offensichtlich, für manche muss man sich auch etwas anstrengen. So ein Magnet fällt schließlich nicht vom Himmel.
Ein Beispiel: Sind die Worte gleichlang, muss die erste Ziffer kleiner 5 sein. Dein Sourcecode arbeitet für EINS+EINS=ZWEI die Hälfte der Zeit gegen Möglichkeiten, die definitiv keine Lösung werden können.
Was von dem Heuhaufen übrig bleibt kannst Du sieben:
Zahlen, die eine Bedingung nicht erfüllt findest Du vermutlich sehr schnell, womit Du das Programm weiterhin beschleunigen kannst. Du kannst die Bedingungen der Reihe nach aufschreiben und prüfen, schlägt die erste Bedingung fehl, wirfst Du den Kandidaten weg, Du kannst Du Dir jede weitere Prüfung sparen.
Was alle Prüfungen besteht, muss eine Nadel sein.
Das ist vielleicht etwas mehr zu tippen, aber zum einen lesbar, verständlich und bedarf nicht derart vieler verschachtelter Schleifen. Damit ist es auch massiv schneller.
Statt der Nadel im Heuhafen jagen Informatiker auch gerne Elefanten in Afrika:
http://www.hrz.uni-dortmund.de/computerPostille/Dezember2001/016.html
Re: Buchstabensalat -- Hilfe
wirthi - 11.12.2007, 10:38Re: Buchstabensalat -- Hilfe
Xin hat folgendes geschrieben: Schleifen, die innerhalb von Schleifen ausgeführt werden, verbrauchen massiv Leistung. Du hast 5 Schleifen ineinander verschachtelt. Damit kannst Du problemlos Großrechner lahm legen.
Prinzipiell hast du absolut recht Xin. Im vorliegenden Fall allerdings: 1.000.000 Durchläufe sollte ein aktueller PC in deutlich unter einer Sekunde schaffen :-)
Re: Buchstabensalat -- Hilfe
Xin - 11.12.2007, 12:33Re: Buchstabensalat -- Hilfe
wirthi hat folgendes geschrieben: Xin hat folgendes geschrieben: Schleifen, die innerhalb von Schleifen ausgeführt werden, verbrauchen massiv Leistung. Du hast 5 Schleifen ineinander verschachtelt. Damit kannst Du problemlos Großrechner lahm legen.
Prinzipiell hast du absolut recht Xin. Im vorliegenden Fall allerdings: 1.000.000 Durchläufe sollte ein aktueller PC in deutlich unter einer Sekunde schaffen :-)
Hmm... sind sogar 6 Schleifen.
Die Programmierweise ist falsch - auch wenn das Ergebnis (auf modernen!) Rechnern binnen 1 Sekunde da ist. Moderne Rechner 1 Sekunde lahm zu legen, sollte mit einer entsprechenden Rechnung begründet sein, nicht mit sowas. Vielleicht sollte man als Programmieranfänger nicht gleich ganz selbstverständlich die Rechenleistung mehrerer Crays beanspruchen.
Wenn ich Leuten das Programmieren beibringe, lasse ich sie gerne Fibunaccizahlen ausrechnen.
fib( 0 ) = 0;
fib( 1 ) = 1;
fib( n ) = fib( n-1 ) + fib( n-2 );
Das legt jeden Rechner beliebiger Leistung schon bei kleinen n lahm. Bei einem P4 wird's bei n um die 40 schon langsam langweilig.
Mit ein wenig (und es verlangt wirklich nicht viel) Überlegung löst jeder 64er (8 Bit CPU mit um die 950 ->Kilo<-Hertz) die Aufgabe schneller als ein moderner Computer.
Es gibt Probleme, da spielt es einfach keine Rolle, ob der Computer schnell oder langsam ist, weil die Probleme so groß sind, dass auch Hochleistungscluster keine Chance haben. Also bleibt keine Rechenzeit, um sie zu vergeuden.
BruteForce ist die Kapitulation des Geistes, keine Strategie ein Problem zu lösen.
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken
Weitere Beiträge aus dem Forum Tutorials.at
TIMER - gepostet von Martix391 am Dienstag 20.06.2006
Turbo C? - gepostet von G_0_M am Sonntag 25.11.2007
TutorialSammlung für FAQ - gepostet von AQE89 am Montag 30.04.2007
cygwin ?? - gepostet von Dirty Oerty am Sonntag 25.02.2007
Geschachtelte Schleifen - gepostet von Kimi am Donnerstag 29.11.2007
PC-Spiele programmieren - gepostet von Dominik92 am Mittwoch 13.09.2006
Brauche Headerdatei graphics.h - gepostet von mitti am Freitag 18.05.2007
TASM Compiler - auch mit ohne OBJ? - gepostet von r00tnix am Freitag 20.10.2006
Wichtige Frage zu Pascal - gepostet von Akira am Montag 25.06.2007
Ähnliche Beiträge wie "Buchstabensalat -- Hilfe"
Rogue Char Punkte verteilung Hilfe! - Th3_PuNiSh3r (Dienstag 01.11.2005)
Hilfe zu euren Signaturen, Avataren usw. - Aurora DeGardo (Donnerstag 09.08.2007)
DF 4 Hauptrahmen gebrochen Hilfe!!!!!!!!! - offre (Dienstag 05.09.2006)
Hilfe, ich werd Angegriffen... - kleinergrizzly (Donnerstag 28.12.2006)
Kriege den DF 5 nicht eingestellt,... HILFE - Adamski (Sonntag 30.09.2007)
Hilfe ich brauche dringend Getreide - susan (Donnerstag 19.07.2007)
Happy Birthday liebe Sandra - Nicole (Sonntag 07.12.2008)
Hilfe -.- - Bianca (Dienstag 12.12.2006)
Hilfe, ich bin DaWanda süchtig... - IM307 (Freitag 31.08.2007)
hilfe - Claudio (Donnerstag 20.07.2006)