brute force programm schreiben
-
Wieso?
-
tori1117 schrieb:
hallo, ich bin ein anfänger in c++ und habe in der letzen zeit die basics angeschaut. Ich wollte ein einfaches brute force programm schreiben, das die zahlen von 1-10 ausprobiert. Ich habe keine ahnung wie ich anfangen soll.
Hoffe, dass ihr mir helfen könnt.mfg tori
Hallo tori,
Willkommen im C++.
Du hast vergessen zu erwähnen, was Du mit Deinem Programm überhaupt bezwecken willst. Ansonsten ist der Tipp von volkard 'wie einen Kilometerzähler' goldrichtig. Der Unterschied liegt darin, dass letzterer die Ziffern 0 bis 9 anzeigt, aber mit den Zahlen 1 bis 10 geht es genauso:
#include <algorithm> // copy, any_of #include <iostream> #include <iterator> // ostream_iterator #include <vector> template< typename T, int W > struct Fix // Zweck von Foxis Bruder ist, das Gezappele bei der Ausgabe zu unterdrücken { Fix( const T& wert ) : wert_( wert ) {} const T& wert_; }; template< typename T, int W > std::ostream& operator<<( std::ostream& out, Fix< T, W > i2 ) { out.width( W ); return out << i2.wert_; } int main() { using namespace std; const int MINI = 1; const int MAXI = 10; vector< int > zahlen( 6, MINI ); // N mal MINI ist die Startkombination do { copy( begin( zahlen ), end( zahlen ), ostream_iterator< Fix<int,2> >( cout << " \r", " " ) ); // -- auf auf; zum nächsten Kilometer... for( auto i = begin( zahlen ); i != end( zahlen ); ++i ) { if( ++(*i) <= MAXI ) // MAXI ist der Maximalwert eines Elements in 'zahlen' break; *i = MINI; // falls der eine Wert das Maximum erreicht, Überlauf zur nächsten Stelle } } while( any_of( begin( zahlen ), end( zahlen ), [MINI]( int z ) { return z != MINI; } ) ); // stopp, wenn alle Zahlen wieder das Minimum erreicht haben cout << endl; return 0; }
Die Anzahl der Stellen habe ich mal auf 6 gesetzt (s. Zeile 24), kannst natürlich auch andere Werte eintragen.
Gruß
Werner
-
tori1117 schrieb:
hallo, ich bin ein anfänger in c++ und habe in der letzen zeit die basics angeschaut.
Ich bezweifele, dass unter Basics Templates/Klassen/Iteratoren/Algorithmen fallen...
-
Werner Salomon schrieb:
while( any_of
Ich würde links noch ein unsichtbares Rad anbringen, und wenn es sich zum erstenmal dreht, ist die Feier gelaufen.
-
irgendwie verstehe ich nur bahnhof muss mir nochmal die basics anschauen.
Hatte vor, dass man eine zahlenkombination eingibt und das programm alles ausprobiert bis er es raus hat.
-
tori1117 schrieb:
irgendwie verstehe ich nur bahnhof muss mir nochmal die basics anschauen.
Hatte vor, dass man eine zahlenkombination eingibt und das programm alles ausprobiert bis er es raus hat.#include <iostream> int main() { using namespace std; cout << "Zahl: "; unsigned int zahl; cin >> zahl; cout << "Suche nach " << zahl << '\n'; for(unsigned i = 0; ; ++i) { cout << "Probiere " << i << " ... "; if (i == zahl) { cout << "Gefunden!\n"; return 0; } else cout << "daneben\n"; } }
Dies ist eines der merkwürdigsten Programme, die ich je geschrieben habe
-
SeppJ schrieb:
Dies ist eines der merkwürdigsten Programme, die ich je geschrieben habe
Fehlt nur noch Fehlerbehandlung einer falschen Eingabe, aktuell wird dann immer '0' gefunden.
Ausserdem wäre hier
std::flush
undstd::endl
angebracht, sonst meint der Nutzer noch, das Inkrementieren geht viel länger als das Probieren.
-
xXxbennixXx schrieb:
SeppJ schrieb:
Dies ist eines der merkwürdigsten Programme, die ich je geschrieben habe
Fehlt nur noch Fehlerbehandlung einer falschen Eingabe, aktuell wird dann immer '0' gefunden.
Ausserdem wäre hier
std::flush
undstd::endl
angebracht, sonst meint der Nutzer noch, das Inkrementieren geht viel länger als das Probieren.Oh ja (ungetestet):
#include <iostream> #include <unistd.h> int main() { using namespace std; cout << "Zahl: "; unsigned int zahl; if (cin >> zahl) { cout << "Suche nach " << zahl << '\n'; for(unsigned i = 0; ; ++i) { cout << "Probiere " << i << flush; for (int i = 0; i < 5; ++i) { cout << '.' << flush; usleep(100000); // 0.1 Sekunden } if (i == zahl) { cout << "Gefunden!\n"; return 0; } else cout << "daneben\n"; } } else cout << "Das war keine Zahl.\n"; }
-
ich bekomme zwei fehlermeldungen
#include <unistd.h> kann nicht geöffnet werden
usleep ist nicht definiert
-
Du nutzt Windows? Dann musst du stattdessen windows.h inkludieren und Sleep nutzen, wobei Sleep nur im Millisekundenbereich arbeitet.
-
ja hat funktioniert. Wenn ich eine Zahl eingebe steht da: probiere 0.
-
tori1117 schrieb:
ja hat funktioniert. Wenn ich eine Zahl eingebe steht da: probiere 0.
Nicht immer so ungeduldig sein. Nach 100000 Millisekunden (knapp 2 min) probiert er 1. Ich würde das sleep ganz rausnehmen.