005
27.01.2004, 21:22 Uhr
(un)wissender
Niveauwart
|
Das folgende Programm ist ineffizient, unübersichtlich und erweckt den Anschein von Korrektheit. Damit möchte ich demonstrieren, wie schlau ich bin, nachmachen ist nicht zu empfehlen!
C++: |
#include <iostream> #include <string> #include <algorithm> using namespace std;
int maxAnzahlLoesungen = 5; int anzahlLoesungen = 0; const int laenge = 5; string vornamen[] = {"Anna", "Berta", "Dirk", "Emil", "Christa"}; string nachnamen[] = {"Hungerast", "Platten", "Krampf", "Sturz", "Achter" }; string trikotfarben[] = {"gelb", "rot", "blau", "weiß" , "schwarz" }; int platzierung[] = {1,2,3,4,5};
int findeString(string array[], const string &toFind) { for(int i = 0; i < laenge; ++i) { if(array[i] == toFind) return i; } return -1000000; }
int main() { const int laenge = 5; sort(vornamen, vornamen + laenge); sort(nachnamen, nachnamen + laenge); sort(trikotfarben, trikotfarben + laenge); sort(platzierung, platzierung + laenge); do { do { do { do { //cout << "iter\n"; //Sturz vor Hungerast if(platzierung[findeString(nachnamen, "Sturz")] > platzierung[findeString(nachnamen, "Hungerast")]) continue; //rot dirkt vor gelb int indexRot = platzierung[findeString(trikotfarben, "rot")]; int indexGelb = platzierung[findeString(trikotfarben, "gelb")]; if(indexRot != indexGelb - 1) continue; //Achter hat blau if(trikotfarben[findeString(nachnamen, "Achter")] != "blau") continue; //schwarzes Trikot nach Berta if(platzierung[findeString(vornamen, "Berta")] > platzierung[findeString(trikotfarben, "schwarz")]) continue; //Christa kam nach Emil ins Ziel if(platzierung[findeString(vornamen, "Christa")] < platzierung[findeString(vornamen, "Emil")]) continue; //Dirk überprüfen int indexDirk = findeString(vornamen, "Dirk"); if(trikotfarben[indexDirk] != "blau") continue; if(nachnamen[indexDirk].size() != 6) continue; if(platzierung[indexDirk] != 3 && platzierung[indexDirk] != 5) continue; //Emil überprüfen int indexEmil = findeString(vornamen, "Emil"); if(nachnamen[indexEmil].size() != 6) continue; if(platzierung[indexEmil] != 3 && platzierung[indexEmil] != 5) continue; //Gewonnen cout << "\n****************Loesung " << ++anzahlLoesungen <<" *****************\n"; for(int i = 0; i < laenge; ++i) cout << platzierung[i] << ". wurde " << vornamen[i] << " " << nachnamen[i] << " mit dem " << trikotfarben[i] << "en Trikot!\n"; if(anzahlLoesungen == maxAnzahlLoesungen) return 0; }while(next_permutation(vornamen, vornamen + laenge)); sort(vornamen, vornamen + laenge); }while(next_permutation(nachnamen, nachnamen + laenge)); sort(nachnamen, nachnamen + laenge); }while(next_permutation(trikotfarben, trikotfarben + laenge)); sort(trikotfarben, trikotfarben + laenge); }while(next_permutation(platzierung, platzierung + laenge)); return 0; }
|
Bearbeitung: |
Wer eine überflüssige Schleife oder eine überflüssige Variable findet, der darf sie behalten.
|
-- Wer früher stirbt ist länger tot. Dieser Post wurde am 27.01.2004 um 21:33 Uhr von (un)wissender editiert. |