| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: Treppensteigen im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Hi, ich hab wieder mal eine Programmieraufgabe für euch (angelehnt an ein 'Hackit'): Und zwar sollt ihr ein Programm schreiben ...
![]() |
| | #1 (permalink) |
| Hi, ich hab wieder mal eine Programmieraufgabe für euch (angelehnt an ein 'Hackit'): Und zwar sollt ihr ein Programm schreiben das ausrechnet wie viele Möglichkeiten es gibt eine x Stufen lange Treppe zu ersteigen wenn man zwischen 2 und 1 Stufen pro 'Tritt' wählen kann. Die Anzahl der Stufen soll vom User kommen,das Programm soll die Möglichkeiten und deren Anzahl ausgeben. Mögliches Output: Treppenstufen: 4 ... Möglichkeiten: 5 1 1 1 1 - 1 1 2 - 1 2 1 - 2 1 1 - 2 2 Happy Coding, Xalon | |
| | |
| | #2 (permalink) |
| Registriert seit: 03.12.04 ![]() Likes: 0 | Java-Lösung Müsste einwandfrei Funktionieren. Ein Beispiel für die Ausgabe bei 6 Treppenstufen: Code: Treppenstufen: 6 Möglichkeiten: 13 111111 - 21111 - 2211 - 222 - 2121 - 2112 - 12111 - 1221 - 1212 - 11211 - 1122 - 11121 - 11112 |
| | |
| HaBOT | |
| |
| | #3 (permalink) |
| Registriert seit: 21.07.05 ![]() Likes: 0 | es kommt die Reihe der fibonaccizahlen raus...nur falls jumd ma überprüfen will, ob sein prog auch für größere treppen läuft... |
| | |
| | #4 (permalink) | |
| Registriert seit: 03.12.04 ![]() Likes: 0 | Zitat:
Habs jetzt auch mit 10 Stufen (89 Möglichkeiten) und 15 Stufen (987 Möglichkeiten) getestet. Bei 15 Stufen rechnet er aber schon ne ganze weile. | |
| | |
| | #5 (permalink) |
| Registriert seit: 01.11.03 ![]() Likes: 0 | Meine Lösung in C++ 37 Zeilen C++ Also bei 15 Stufen geht es noch fast ohne Verzögerung (~50ms). Bei 30 Stufen sinds dann aber gut 5 Sekunden. |
| | |
| | #6 (permalink) |
| Registriert seit: 29.04.07 ![]() Likes: 0 | OMG.Ich glaub ich hab die schnellste Lösung .Ist ja mal echt nicht schwer gewesen!Lösung edit: Diese Aufgabe wäre sehr gut in Java zu Lösen (BigInteger), weil man da auch sehr große Treppen eingeben kann.Dafür gehts etwas langsamer, denn BigInteger ist ne saulahme Klasse..... weiteres edit:Hoppla, mit dieser Möglichkeit gibt man ja die Möglichkeiten nicht aus.... Sry. |
| | |
| | #7 (permalink) |
| Guest Likes: | Ich habe das ganze in Python Programmiert (Mein erstes sinnvolles Python Programm) Code Richtig testen ob es die korrekten werte liefert konnte ich es nicht. Ich hab mich jetzt einfach mal an der Aussage von Boar orrientiert das 10 Stufen 89 Möglichkeiten und 15 stufen 987 Möglichkeiten sind. Das ganze arbeitet recht flott 50000 Stufen unter einer Sekunde, nur die Zahl ist Gigantisch ^^ mfg ba2 |
|
| | #8 (permalink) |
| Hier noch eine Lösung in Perl nach dem bewährten Divide-And-Conquer Verfahren ;-) code mfg, metax.
__________________ Wenn keiner zuschaut, teile ich heimlich durch Null! Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter | |
| | |
| | #9 (permalink) |
| Registriert seit: 14.07.07 ![]() Likes: 0 | Habs auch nochmal mit Backtracking unter C gemacht, leider nur so dass es zeigt wie viele Möglichkeiten, aber nicht welche: Code: #include <stdio.h>
void treppe(int stufen, int aktuell, int * moeg){
if(stufen==aktuell) {
(*moeg)++;
return;
}
if(aktuell+2<=stufen){
treppe(stufen,aktuell+2, moeg);
}
treppe(stufen,aktuell+1, moeg);
}
int main() {
int moeg=0;
int stufen=6;
treppe(stufen,0,&moeg);
printf("Moeglichkeiten bei %d Stufen: %d\n",stufen,moeg);
return 0;
} |
| | |
| | #10 (permalink) |
| Registriert seit: 14.11.07 ![]() Likes: 0 | Lest euch mal bitte die Aufgabenstellung durch... Es kann garnicht sein das bei 10 Stufen es 89 Möglichkeiten gibt jedenfalls nicht nach diese Aufgabenstellung ...... Die möglichkeit 112 und 211 ist doch die gleiche also dürfte es doch nur 1 Möglichkeit sein, oder seh ich etwas falsch. Hier mein Lösungsansatz ich denk mal die Aufgabe war so gemeint. |
| | |
| | #11 (permalink) |
| Senior Member Registriert seit: 26.03.06 ![]() Likes: 12 | @Boar: Um doppelte zu vermeiden kannst du statt Vector<String> ein Set<String> benutzen. |
| | |
| | #12 (permalink) |
| Registriert seit: 28.09.07 ![]() Likes: 0 | @CyberPuma: Ne, ich glaube nicht, außerdem ist das doch gerade schwieriger. Hier jedenfalls mein Programm, es gibt die Kombinationen zwar noch nicht richtig aus, aber das werde ich noch beheben. Zudem kann man die Maximale Schrittgröße bei mir eingeben. Das Ganze habe ich rekursiv gelöst, wobei ich glaube das man das ja nicht anders machen kann(wenn nicht, dann sagt es mir bitte). Code: #include<iostream>
using namespace std;
int GiveNumber(const int NumberHoles,int MaxStep);
int main(void)
{
cout<<"Geben sie die Anzahl der Stufen an\n";
int NumberHoles=0;
int MaxStep=0;
cin>>NumberHoles;
if(NumberHoles<1)return 1;
cout<<"Wie gross darf ein Schritt sein?\n";
cin>>MaxStep;
if(MaxStep<1)return 1;
int InfoSteps=GiveNumber(NumberHoles,MaxStep);
cout<<"\n\n\nEs gibt "<<InfoSteps<<" Moeglichkeiten\n";
cin>>NumberHoles;
return 0;
}
int GiveNumber(const int NumberHoles,int MaxStep)
{
int PossibleSteps=0;
int CopyHoles=NumberHoles;
for(int i=1;i<=MaxStep;i++)
{
CopyHoles=NumberHoles;
CopyHoles-=i;
cout<<i;
if(CopyHoles==0)
{
cout<<'\n';
PossibleSteps++;
return PossibleSteps;
}
PossibleSteps+=GiveNumber(CopyHoles,MaxStep);
}
return PossibleSteps;
} |
| | |
| | #13 (permalink) |
| Registriert seit: 22.03.08 ![]() Likes: 0 | Treppenknecht v0.1 Nimmt die Stufenanzahl entweder als erstes Argument oder von STDIN. Außerdem kann man einfach das "Schrittweitenmaximum" ändern beziehungsweise auch einfach irgendeine willkürliche Liste mit Schrittmöglichkeiten eintragen. Die Anzahl der Möglichkeiten hätte ich extra mit angeben können, aber ich habe lieber eine Möglichkeit pro Zeile und pipe das dann in wc. Wäre ja auch kein Problem das eben mit ins Skript zu nehmen, but i prefer not to. Code: ./treppenknecht.pl 23|wc -l 46368 |
| | |
| | #14 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() Likes: 156 | Wozu muss man sich irgendwelche Algorithmen überlegen? Der Computer ist doch zum Nachdenken da, man muss ihm nur das Problem beschreiben Prolog gut kommentiert oder Prolog, kommentarlos und kompakt wobei "findall" keine magische und geheime Handlung darstellt, sondern dazu dient alle Lösungen aufeinmal auszugeben (normalerweise liefert Prolog immer nur eine und man muss explizit bestätigen, wenn man eine weitere haben möchte). Ausgabe Wobei man sich auch eine Beschreibung als Permutation der Schritte vorstellen könnte (aber solange mache ich Prolog noch nicht).
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #15 (permalink) |
| Registriert seit: 12.01.07 ![]() Likes: 0 | ObjectPascal Lösung Ich hab das Problem mit einer Rekursion gelöst. Eine Beispielausgabe: Code: Bitte Anzahl der Stufen eingeben: 5 11111 | 1112 | 1121 | 1211 | 122 | 2111 | 212 | 221 | Anzahl der Moeglichkeiten: 8 |
| | |
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |