ashaneen Temat założony przez niniejszego użytkownika |
Zadanie domowe [ lekcja 30] - zagniezdzanie pętli » 2013-02-17 18:54:58 int main() { int licznik = 0; for( int a = 1; a < 49; a++ ) { for( int b = 1; b <= 49; b++ ) { for( int c = 1; c <= 49; c++ ) { for( int d = 1; d <= 49; d++ ) { for( int e = 1; e <= 49; e++ ) { for( int f = 1; f <= 49; f++ ) { if( a != b && b != c && c != d && d != e && e != f ) licznik++; } } } } } } cout << licznik; }
Nie wyświetla mi zmiennej licznik. zadanie polega na obliczeniu ilości możliwych wylosowań 6liczb bez powtórzeń. ------------------------ chciałem sprobować liznąć to od innej strony ale też mi wyniku nie zwraca oO int a = 49; int hehe = 0; do { hehe = a *( a - 1 ); } while( a != 1 );
cout << hehe; return 0;
zastosowałem zmienną long long i po jakimś czasie obliczyło mi 12 miliardów , troche za dużo chyba. ** w przykładzie pierwszym z zagnieżdżaniem. |
|
pjpeg_objected |
» 2013-02-17 22:21:51 W pierwszym programie wydaje mi się, że po prostu trochę to potrwa bo będziesz zwiększał licznik 48 razy do potęgi 6. Natomiast w drugim programie nie zmniejszasz nigdzie zmiennej a więc pętla nigdy się nie skończy i dlatego nie wyświetla Ci wyniku. |
|
matka5432 |
» 2013-02-18 01:13:14 W pierwszym programie zmienna 'licznik' pokaze ci sie dopiero po 1 - 2 minutach :D komp musi zrobic az 13841287201 operacji czyli prawie 14 mld :) zmniejsz liczbe powtorzen z 49 na 30 lub mniej, albo poprostu usun jedna petle. Natomiast w drugim tak jak powiedzial kolega wyzej. |
|
ashaneen Temat założony przez niniejszego użytkownika |
» 2013-02-18 14:33:46 no faktycznie z tym drugim, bezmyślnie wystrugany kod w 15 sekund bez sekundy refleksji, więc taki głupi błąd sie wkradł.
@matka5432 Nie rozumiem jak zmniejszenie pętli albo puli, pozwoli mi wypisać wynik zadania, który wymaga ( według mojego obecnego przekonania ) takich liczb. |
|
ashaneen Temat założony przez niniejszego użytkownika |
» 2013-02-19 19:27:11 Dalej liczę na jakąś odpowiedź,gdyż złapałem zastój a nie mam zamiaru omijać murów, będę wdzięczny za każdą sugestię lub opinie. edit: Takiego cudaka wyskrobałem ale zwraca ponad miliard znowu. int petla() { int licznik = 0; for( int a = 1; a < 49; a++ ) { for( int b = 1; b <= 49; b++ ) { if( b == a ) continue; for( int c = 1; c <= 49; c++ ) { if(( c == b ) ||( c == a ) ) continue; for( int d = 1; d <= 49; d++ ) { if(( d == b ) ||( d == a ) ||( d == c ) ) continue; for( int e = 1; e <= 49; e++ ) { if(( e == a ) ||( e == b ) ||( e == c ) ||( e == d ) ) continue; for( int f = 1; f <= 49; f++ ) { if(( f == a ) ||( f == b ) ||( f == c ) ||( f == d ) ||( f == e ) ) continue; licznik++; } } } } } } return licznik; }
|
|
willhelm |
» 2013-02-19 23:08:00 Ale czego od nas teraz oczekujesz? Program działa, zwraca ponad 13 mld wyników, więc co jest nie tak? |
|
ashaneen Temat założony przez niniejszego użytkownika |
» 2013-02-20 12:32:37 W zadaniu napisane jest
"Weryfikacja poprawności zadania Jeżeli uzyskana wartość mieści się w przedziale od 12 do 15 milionów to znaczy, że poprawnie rozwiązałeś zadanie."
Więc 13 mld to chyba za dużo.
wiki: "W Lotto jest możliwych 13 983 816 różnych zestawów 6 liczb."
----------
Myśle, że przyczyną takiego wyniku jest to, że zlicza np zestaw 123456 jako jeden, i 213456 jako drugi mimo, że posiadają te same wartości, ale jak to zrobić teraz by sprawdzać to nie wiem.
edit: Dobra, widocznie czas zmienić forum. |
|
firefighterkasa |
» 2013-02-21 22:25:33 Zamiast 49 w każdej pętli wpisz 6 i powinieneś uzyskać wynik 1 tzn możliwa jest tylko jedna taka kombinacja 6 liczb bez powtórzeń, jeśli takiego wyniku nie uzyskasz tzn że twój program zlicza prawdopodobnie kombinacje bez powtórzeń w których kolejność wylosowanych liczb ma znaczenie a to już nie jest lotto. |
|
« 1 » |