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

[Lekcja 30] Zadanie z lotto

Ostatnio zmodyfikowano 2014-07-28 13:48
Autor Wiadomość
Ard123
Temat założony przez niniejszego użytkownika
[Lekcja 30] Zadanie z lotto
» 2014-07-27 21:29:41
Mam problem w zadaniu z ustaleniem liczby możliwych kombinacji w lotto. Prawidłowy wynik powinien wynosić około 14 mln a mi wychodzi około 1.5 miliarda. Liczb jest 6 w przedziale od 1 do 49. Pozostałe zadania wyszły dobrze, sprawdzałem też czy wykonuje się poprawnie dodając wypisywanie liczb (było ok, bez powtarzających się liczb).  Kod:
C/C++
#include <iostream>

int main()

{
    int kombinacje = 0;
    for( int a = 1; a < 50; a++ )
    {
        for( int b = 1; b < 50; b++ )
        {
            for( int c = 1; c < 50; c++ )
            {
                for( int d = 1; d < 50; d++ )
                {
                    for( int e = 1; e < 50; e++ )
                    {
                        for( int f = 1; f < 50; f++ )
                        {
                            if( b != a and b != c and b != d and b != e and b != f and c != a and c != b and c != d and c != e and c != f and d != a and d != b and d != c and d != e and d != f and e != a and e != b and e != c and e != d and e != f and f != a and f != b and f != c and f != d and f != e )
                                 kombinacje++;
                           
                        }
                    }
                }
            }
        }
    }
    std::cout << "Liczba kombinacji: " << kombinacje;
    return 0;
}
Gdzie jest błąd?
P-114500
bombatom69
» 2014-07-28 01:46:42
Warunek wewnętrzny sprawdza Ci wyłącznie czy liczniki pętli nie są sobie równe, ale nie eliminuje sytuacji, w której będziesz miał w różnych iteracjach te same wyniki lecz w innej sekwencji.

Chyba nie powinienem Ci bardziej podpowiadać, bo wiąże się to z włączeniem dodatkowego zabiegu do pętli.
Rozwiązanie powinno wykluczyć jakikolwiek warunek wewnątrz pętli.
P-114504
Ard123
Temat założony przez niniejszego użytkownika
» 2014-07-28 08:24:39
No tak, sprawdza tylko czy liczniki nie są równe a gdy warunki są spełnione to zwiększa zmienną kombinacje o 1 (i tylko wtedy gdy warunki są spełnione) więc pętle wykonają się całe ale zmienna kombinacje nie będzie się cały czas zwiększać, więc chyba powinno być dobrze. Napisałem program nieco inaczej, nie wiem czy dobrze Cię zrozumiałem, tutaj kod:
C/C++
#include <iostream>

int main()

{
    int kombinacje = 0;
    int a;
    int b;
    int c;
    int d;
    int e;
    int f;
    for( a = 1; a < 50; a++ )
    {
        if( a != b and a != c and a != d and a != e and a != f )
        for( b = 1; b < 50; b++ )
        {
            if( b != a and b != c and b != d and b != e and b != f )
            for( c = 1; c < 50; c++ )
            {
                if( c != b and c != a and c != d and c != e and c != f )
                for( d = 1; d < 50; d++ )
                {
                    if( d != a and d != b and d != c and d != e and d != f )
                    for( e = 1; e < 50; e++ )
                    {
                        if( e != b and e != c and e != d and e != a and e != f )
                        for( f = 1; f < 50; f++ )
                        {
                            if( f != a and f != b and f != c and f != d and f != e )
                            {
                                kombinacje++;
                            }
                        }
                    }
                }
            }
        }
    }
    std::cout << "Liczba kombinacji: " << kombinacje;
    return 0;
}
Program działa identycznie z tą różnicą, że pętle nie wykonują się w całości (działa szybciej). Niestety wynik wciąż dokładnie ten sam co wcześniej. O to Ci chodziło?
P-114509
pekfos
» 2014-07-28 11:13:00
Żadne dodatkowe warunki nie są tu potrzebne.
P-114518
Ard123
Temat założony przez niniejszego użytkownika
» 2014-07-28 13:48:43
No tak, już wiem co jest źle, chodziło Ci o to, że te same liczby w innym ustawieniu dają kolejną kombinacje, dzięki za pomoc, później poprawie to co napisałem. (:
P-114549
« 1 »
  Strona 1 z 1