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

Lekcja 30 - Ostatnie zadanie domowe (Lotto i te sprawy)

Ostatnio zmodyfikowano 2014-08-21 17:24
Autor Wiadomość
Sorbet
Temat założony przez niniejszego użytkownika
Lekcja 30 - Ostatnie zadanie domowe (Lotto i te sprawy)
» 2014-08-19 20:51:35
Uszanowanko,
W rozdziale o zagnieżdżaniu pętli (#30) udało mi się zrobić wszystkie zadania oprócz ostatniego, próbowałem zrobić je w sposób podobny do poprzednich(i pewnie o to chodzi), ale mi nie wyszło bo ma wyjść między 12 a 15 milionów, a mi wychodzi 134 miliony.
Prawdopodobnie ktoś już o to pytał, ale nie wiem czy to wina mojego komputera/przeglądarki, ale wyszukiwarka nie zwraca mi żadnych wyników wyszukiwania (nawet jeśli wpiszę po prostu "a" to mam 0 wyników). Po przejrzeniu 10 stron zrezygnowałem. Chyba zbyt rozległy wstęp napisałem. Do rzeczy:

Załączam treść zadania:
"Napisz program, który zliczy liczbę możliwych kombinacji wylosowania 6 liczb ze zbioru 49 liczb (reasumując: rozpatrujesz problem popularnej gry liczbowej Lotto). Zadanie należy rozwiązać przy pomocy zagnieżdżonych pętli (nie można używać wzoru)."

I mój kod:
C/C++
#include <iostream>

int main( int argc, char * argv[] )
{
    bool p[ 49 ];
    for( int i = 0; i < 49; i++ )
         p[ i ] = false;
   
    long mozliwosci = 0;
    for( int a = 0; a <= 43; ++a )
    {
        p[ a ] = true;
        for( int b = 1; b <= 44; ++b )
        {
            p[ b ] = true;
            for( int c = 2; c <= 45; ++c )
            {
                p[ c ] = true;
                for( int d = 3; d <= 46; ++d )
                {
                    p[ d ] = true;
                    for( int e = 3; e <= 47; ++e )
                    {
                        p[ e ] = true;
                        for( int f = 4; f <= 48; ++f )
                        {
                            if( a != b && a != c && a != d && a != e && a != f && b != c && b != d && b != e && b != f && c != d && c != e && c != f && d != e && d != f && e != f )
                            {
                                if( p[ f ] != true )
                                {
                                    mozliwosci++;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    std::cout << "Ilosc mozliwosci: " << mozliwosci << std::endl;
    std::cin.get();
    return 0;
}
Proszę o nakierowanie mnie na rozwiązanie albo udzielenie wskazówek.
Z góry dziękuję,
Sorbet
P-115768
pekfos
» 2014-08-19 20:59:26
Nie potrzeba tu żadnych instrukcji if, ani tablic.
P-115769
Sorbet
Temat założony przez niniejszego użytkownika
» 2014-08-19 21:02:17
Instrukcje IF i tablice wsadziłem tu po to, żeby nie było powtórek takich jak 1,2,3 i 1,3,2.
P-115770
1aam2am1
» 2014-08-19 21:04:03
A powtórki tych samych liczb.
P-115771
pekfos
» 2014-08-19 21:04:20
Nie jest to do niczego potrzebne. Powtórki można w całości wyeliminować odpowiednią konstrukcją pętli.
P-115772
Sorbet
Temat założony przez niniejszego użytkownika
» 2014-08-19 21:06:49
Widzę właśnie że zacząłem dwie pętle od tej samej liczby, to już coś. Idę poprawić.
P-115773
Sorbet
Temat założony przez niniejszego użytkownika
» 2014-08-19 21:10:45
Zeszły 3 miliony. Ale nie jestem w stanie skonstruować takich pętli, które załatwią sprawę.
P-115775
pekfos
» 2014-08-20 00:02:23
To zacznij od analizy efektu, jaki chcesz uzyskać. Np dla 3 pętli 1-5:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
Jak widać, im wyższe liczby, tym mniej obiegów i od wyższych wartości się zaczynają..
P-115789
« 1 » 2
  Strona 1 z 2 Następna strona