losowanie liczb nie występujących w kolejce ( lista tabu )
Ostatnio zmodyfikowano 2018-01-09 13:21
mateczek |
» 2018-01-08 22:25:27 A może takie rozwiązanie przypadnie Ci do gustu ?? jak napisanie własnej klasy kolejki, którą wyposażysz w potrzebne Ci metody ?? Poniżej przykład klasy kolejki napisany na bazie klasy std::list. #include <iostream> #include<ctime> #include<list> using namespace std; class mQuene : public list < int > { bool isOnQuene( int el ) { for( auto element:* this ) { if( element == el ) return true; } return false; } public: void enquene( int el ) { if( !isOnQuene( el ) ) { push_back( el ); } } int dequene() { int el = * begin(); pop_front(); return el; } }; ostream & operator <<( ostream & s, const mQuene & kolejka ) { for( auto el: kolejka ) { s << el << " "; } return s; } int main() { srand( time( NULL ) ); mQuene kolejka; while( kolejka.size() < 5 ) { kolejka.enquene( rand() % 10 + 1 ); } cout << kolejka; }
|
|
mikewazowski Temat założony przez niniejszego użytkownika |
» 2018-01-09 11:57:11 po przerobieniu na pętle zamiast instrukcji goto, losowanie liczb działa jak trzeba ale nadal mam problem ze sprawdzeniem czy w kolejce jest liczba @mateczek - niestety twój kod nawet jeśli działa nie pomoże mi ponieważ jest dla mnie za bardzo zaawansowany i nie będę potrafiła go wytłumaczyć przy oddawaniu projektu int czy_w_kolejce( int liczba ) { queue < int > kolejka_tymczasowa; kolejka_tymczasowa = kolejka_tabu; int jest = 0; do { if( kolejka_tymczasowa.empty() ) { return 0; } else if( !kolejka_tymczasowa.empty() ) { if( kolejka_tymczasowa.front() == liczba ) { jest = 1; } else if( kolejka_tymczasowa.front() != liczba ) { kolejka_tymczasowa.pop(); } } } while( jest == 1 ); if( jest == 1 ) return 1; }
|
|
mateczek |
» 2018-01-09 13:21:07 #include <iostream> #include <queue> using namespace std; bool czyWkolejce( int liczba, queue < int > kol ) { while( !kol.empty() ) { int temp = kol.front(); kol.pop(); if( liczba == temp ) return true; } return false; } int main() { queue < int > kolejka; kolejka.push( 2 ); kolejka.push( 7 ); kolejka.push( 5 ); cout << boolalpha; cout << czyWkolejce( 2, kolejka ) << endl; cout << czyWkolejce( 8, kolejka ) << endl; }
a co do kodu z góry to chodziło mi to by samemu napisać klasę wyposażoną w funkcje odkładania i zdejmowania na bazie listy. w liście masz dostęp do dwóch krańców kontenera i możesz odkładać na wierzch i ściągać ze spodu a taki kod czy już nie prostrzy. Zamiast dziedziczenia kontener w środku. #include<iostream> #include<list> using namespace std; class mQueue { list < int > dane; public: void push( int element ) { dane.push_back( element ); } int pop() { int el = dane.front(); dane.pop_front(); return el; } bool isOnMQueue( int element ) { for( auto el: dane ) { if( el == element ) return true; } return false; } };
int main() { mQueue kolejka; kolejka.push( 4 ); kolejka.push( 5 ); kolejka.push( 7 ); cout << boolalpha; cout << "czy jest w kolejce 4: " << kolejka.isOnMQueue( 4 ) << endl; cout << "sciagam z kolejki: " << kolejka.pop() << endl; cout << "czy jest w kolejce 4: " << kolejka.isOnMQueue( 4 ) << endl; cout << "czy jest w kolejce 5: " << kolejka.isOnMQueue( 5 ) << endl; cout << "czy jest w kolejce 33: " << kolejka.isOnMQueue( 33 ) << endl; }
jedyne co tu użyłem i może być nowością to pętla for z c++11 ale poniższy przykład pokaże Ci że taki zapis "for" nie dość, że wręcz banalny to w wielu sytuacjach strasznie wygodny. #include <iostream> using namespace std;
int main() { int tablica[ 5 ] = { 1, 3, 5, 1, 4 }; for( int element: tablica ) { cout << element << endl; } }
|
|
1 « 2 » |