Lekcja 30 - Ostatnie zadanie domowe (Lotto i te sprawy)
Ostatnio zmodyfikowano 2014-08-21 17:24
Sorbet Temat założony przez niniejszego użytkownika |
» 2014-08-21 15:49:02 Po przespaniu się z problemem i ponownej analizie prostszego przykładu, zrozumiałem od czego zależy, czy możliwości się powtarzają, tylko w innych ustawieniach(chyba). W twoim przykładzie(pekfosa) każda z kombinacji jest posortowana rosnąco, czyli kiedy mam już 1 2 3 to nie mogę mieć 1 3 2. A im wyższa liczba tym mniej obiegów bo w zbiorze <1..5> jest mniej liczb większych od 3 niż od 1. Ale nadal nie wiem jak to zrobić bez warunku if. Mój aktualny kod: #include <iostream>
int main( int argc, char * argv[] ) { for( int a = 1; a < 6; a++ ) { for( int b = 1; b < 6; b++ ) { for( int c = 1; c < 6; c++ ) { if( a < b && b < c ) std::cout << a << " " << b << " " << c << std::endl; } } } std::cin.get(); return 0; }
Swoją drogą, jeśli zacząłbym for z b od 2 a for z c od 3 to przyspieszyło by to program, prawda? |
|
Sorbet Temat założony przez niniejszego użytkownika |
» 2014-08-21 16:04:09 Zrobiłem ostatnie zadanie (lotto), ale nie jestem wystarczająco sprytny, żeby zrobić to bez if . Mój kod: #include <iostream>
int main( int argc, char * argv[] ) { int mozliwosci = 0; for( int a = 0; a <= 43; ++a ) { for( int b = 1; b <= 44; ++b ) { for( int c = 2; c <= 45; ++c ) { for( int d = 3; d <= 46; ++d ) { for( int e = 4; e <= 47; ++e ) { for( int f = 5; f <= 48; ++f ) { if( a < b && b < c && c < d && d < e && e < f ) mozliwosci++; } } } } } } std::cout << "Ilosc mozliwosci: " << mozliwosci << std::endl; std::cin.get(); return 0; } I wyjście w kosnoli: Ilosc mozliwosci: 13983816 Bardzo bym prosił pekfosa o udzielenie mi informacji, jak to zrobić bez if . I mam kilka pytań trochę związanych z tematem, trochę nie: >Czy da się sprawdzić czas w jakim program się wykonuje? >Czy for( int i = 0; i < 6; i++ ) różni się czymś od for( int i = 0; i <= 5; i++ ) czy to tylko kwestia gustu? >Czy ++i ma inny wpływ na przebieg for'ów od i++ ? |
|
pekfos |
» 2014-08-21 17:06:28 for( int a = 1; a < 6; ++a ) for( int b = a + 1; b < 6; ++b ) for( int c = b + 1; c < 6; ++c ) std::cout << a << ' ' << b << ' ' << c << std::endl; Co do offtopu: tak, nie, na ogół nie. |
|
Mateus. |
» 2014-08-21 17:12:02 1. Tak, 2. Nie, 3. Zależy co robisz, ale na razie nie ma to dla ciebie chyba znaczenia. Aby zobrazować różnicę skompiluj sobie taki program: #include <iostream>
using namespace std; int main() { int a = 0, b = 0, c = 0, d = 0; cout << "Wartosci WYRAZEN:\n" << ++a << endl << b++ << endl << --c << endl << d-- << endl; cout << "Wartosci ZMIENNYCH:\n" << a << endl << b << endl << c << endl << d << endl; return 0; }
|
|
Sorbet Temat założony przez niniejszego użytkownika |
» 2014-08-21 17:14:10 Wow, dzięki. Nie pomyślałbym, żeby aż tak uzależnić od siebie te zmienne. A ten zapis for'ów jest taki skrócony, żeby mi pokazać i się nie rozpisywać, czy faktycznie można tak robić? |
|
pekfos |
» 2014-08-21 17:16:14 A ten zapis for'ów jest taki skrócony, żeby mi pokazać i się nie rozpisywać, czy faktycznie można tak robić? |
Można tak zrobić. |
|
Sorbet Temat założony przez niniejszego użytkownika |
» 2014-08-21 17:18:46 @pekfos Może jestem jeszcze za mało wtajemniczony i za mało praktyki mam za sobą, ale taki zapis mi się nie podoba estetycznie i w kwestii cztelności.
@Mateus. Dzięki, chyba rozumiem już, o co chodzi. |
|
Sorbet Temat założony przez niniejszego użytkownika |
» 2014-08-21 17:24:26 Skoro już dostałem odpowiedzi na wszystkie pytania i nikt nic więcej nie pisze, zamykam temat. Dzięki wszystkim. |
|
1 « 2 » |