Rozdział 21 Zadania 1 Problem z powtórzeniami
Ostatnio zmodyfikowano 2022-06-30 09:33
piratek Temat założony przez niniejszego użytkownika |
Rozdział 21 Zadania 1 Problem z powtórzeniami » 2022-06-25 13:10:37 Utknąłem od kilku dni na liczbach losowych i nie mogę ruszyć dalej. Zauważyłem, że to jest pierwsza rzecz w tym kursie, które sprawia mi niesamowitą trudność. Nie potrafię wymyślić, jak powinienem uniknąć powtórzeń. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void Wczytaj3Liczby( int * tablica ) { int licznik = 0; do { cin >> tablica[ licznik ]; licznik++; } while( licznik < 3 ); }
int WylosujPrzedzialtablicy() { return(( rand() % 3 ) + 0 ); }
int main() { srand( time( NULL ) ); int tablica[ 3 ]; int licznik = 0; Wczytaj3Liczby( tablica ); do { int WylosujPrzedzialTablicy = WylosujPrzedzialtablicy(); cout << tablica[ WylosujPrzedzialTablicy ] << endl; licznik++; } while( licznik < 2 ); }
|
|
pekfos |
» 2022-06-25 14:15:07 |
|
OfEl |
» 2022-06-30 09:33:41 Zauważyłem, że to jest pierwsza rzecz w tym kursie, które sprawia mi niesamowitą trudność. Nie potrafię wymyślić, jak powinienem uniknąć powtórzeń. do swojego programu zaimplementować musisz sobie już sam Listing 1. tablica #include <iostream> #include <ctime> #include <cstdlib> #include <algorithm>
using namespace std;
int main() { constexpr int N = 6; unsigned seed = time( 0 ); srand( seed ); int tab[ N ] { 0 }; for( int i = 0; i < N; ) { tab[ i ] = rand() % 10 + 1; bool czyBylaWylosowana = false; for( int k = 0; k < i; ++k ) { if( tab[ k ] == tab[ i ] ) { czyBylaWylosowana = true; break; } } if( !czyBylaWylosowana ) ++i; } for( unsigned int i = 0; i < N; ++i ) cout << tab[ i ] << " "; cout << '\n'; sort( tab, tab + N ); cout << '\n'; for( unsigned int i = 0; i < N; ++i ) cout << tab[ i ] << " "; cout << '\n'; return 0; }
Listing 2. vector #include <iostream> #include <algorithm> #include <random> #include <vector>
using namespace std;
template < typename T > ostream & operator <<( ostream & os, const vector < T > & v ) { if( !v.empty() ) { typename vector < T >::const_iterator it = v.begin(); for(;( it != v.end() ) &&( os << * it );( ++it ),(( it < v.end() ) ?( os << ", " ) :( os << " " ) ) ) { } } return os; }
int main() { constexpr int first { 1 }, last { 20 }, n { 10 }; std::random_device rd; std::mt19937 gen( rd() ); std::uniform_int_distribution < > dist( first, last ); vector < int > v; v.reserve( n ); std::vector < int >::iterator it; for( int i { 0 }; i < n; ) { auto el = dist( gen ); it = std::find( v.begin(), v.end(), el ); if( it == v.end() ) { v.push_back( el ); ++i; } } std::sort( v.begin(), v.end() ); cout << v; cout << '\n'; cout << '\n'; return 0; }
Listing 3. set #include <iostream> #include <set> #include <random> #include <cmath>
using namespace std;
template < typename T > ostream & operator <<( ostream & os, const set < T > & s ) { if( !s.empty() ) { typename set < T >::const_iterator it = s.begin(); for(;( it != s.end() ) &&( os << * it );( ++it ),(( it != s.end() ) ?( os << ", " ) :( os << " " ) ) ) { } } return os; }
int main() { constexpr int first { 1 }, last { 20 }; std::random_device rd; std::mt19937 gen( rd() ); std::uniform_int_distribution < > dist( first, last ); std::set < int > s; for(; s.size() < log2( 1024 );( s.size() < sqrt( 100 ) ) ? cout << "" : cout << s ) { s.insert( dist( gen ) ); } cout <<( char )( 0x0A ); return log10( 1 ); }
|
|
« 1 » |