Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zadanie domowe [ lekcja 30] - zagniezdzanie pętli

Ostatnio zmodyfikowano 2013-02-21 22:25
Autor Wiadomość
ashaneen
Temat założony przez niniejszego użytkownika
Zadanie domowe [ lekcja 30] - zagniezdzanie pętli
» 2013-02-17 18:54:58
C/C++
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
C/C++
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.
P-76455
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.
P-76472
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.
P-76477
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.
P-76489
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.
C/C++
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;
}
P-76544
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?
P-76567
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.
P-76570
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.
P-76690
« 1 »
  Strona 1 z 1