Zadanie 3. Ulubione liczby

Małgosia i Jaś lubią liczby. Małgosia lubi liczby nieparzyste, a Jaś lubi liczby parzyste. Każde z dzieci zapisało po kilka spośród swoich ulubionych liczb na jednej wspólnej kartce. Najpierw Małgosia zapisała wszystkie swoje liczby, a potem Jaś dopisał swoje.

Napisz algorytm (w postaci listy kroków, za pomocą pseudokodu lub w wybranym języku programowania), który dla danego ciągu liczb zapisanych przez dzieci znajdzie pierwszą liczbę zapisaną przez Jasia. Zakładamy, że każde z dzieci zapisało co najmniej jedną liczbę.

Przy ocenie będzie brana pod uwagę złożoność czasowa twojego algorytmu. Maksymalną liczbę punktów uzyskasz za algorytm o złożoności lepszej niż liniowa.

Uwaga!

W zapisie algorytmu możesz wykorzystać tylko operacje arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, reszta z dzielenia), instrukcje porównania, instrukcje sterujące i przypisania do zmiennych lub samodzielnie napisane funkcje, wykorzystujące wyżej wymienione operacje.

Specyfikacja problemu:

Dane:

  • n – liczba całkowita większa od 1

  • A[1..n] – tablica zawierająca ciąg n liczb zapisanych przez dzieci (najpierw wszystkie liczby nieparzyste, a potem wszystkie liczby parzyste)

Wynik:

  • w – pierwsza od lewej parzysta liczba w tablicy A

Przykład:

Dane:

  • n = 10

  • A[1..n] = {5, 99, 3, 7, 111, 13, 4, 24, 4, 8}

Wynik:

  • w = 4

Zadanie zostało opracowane przez Centralną Komisję Egzaminacyjną i pojawiło się na egzaminie maturalnym z informatyki w maju roku (poziom rozszerzony). Cały arkusz można znaleźć na stronie internetowej CKE.

Polecenie 1

Zapisz rozwiązanie zadania w postaci listy kroków, pseudokodu lub za pomocą wybranego języka programowania.

R19L89apcxLs6
RDyOaKRX3rnJD
R1WIRWwpM3mIt
Polecenie 2

Porównaj swoje rozwiązanie z przedstawionym w prezentacji.

R1Z28pwGW0vQj1
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Schemat oceniania

  • 5 pkt – za poprawny algorytm o złożoności czasowej mniejszej niż liniowa, w tym:

    • 1 pkt – za prawidłowy warunek pętli,

    • 1 pkt – za prawidłowe wyznaczenie podziału ciągu liczb,

    • 1 pkt – za prawidłowe wyznaczenie początku podciągu liczb,

    • 1 pkt – za prawidłowe wyznaczenie końca podciągu liczb,

    • 1 pkt – za prawidłowe wyznaczenie pierwszego elementu parzystego w A[1..n] (lub jego indeksu),

  • 3 pkt – za poprawny algorytm o złożoności czasowej liniowej, w tym:

    • 1 pkt – za prawidłowy przebieg pętli,

    • 1 pkt – za sprawdzenie warunku (parzystości liczby),

    • 1 pkt – za prawidłowe wyznaczenie pierwszego elementu parzystego w A[1..n] (lub jego indeksu),

  • 0 pkt – za błędną odpowiedź albo brak odpowiedzi.

Ważne!

W prezentacji wspomniane zostały algorytmy wyszukiwania binarnego oraz liniowego. Więcej informacji na ich temat znajdziesz w e‑materiale Znajdowanie określonego elementu w zbiorzePiVb7f8s2Znajdowanie określonego elementu w zbiorze.

Ciekawostka

Zastosowany w prezentacji algorytm wyszukiwania binarnego jest bardzo podobny do algorytmu bisekcji, używanego do wyznaczenia przybliżenia miejsca zerowego funkcji.

Warunkami, jakie muszą być spełnione, aby bisekcja mogła zostać użyta na danym przedziale, są różne znaki wartości funkcji dla jego krańców oraz monotoniczność funkcji w tym przedziale. Z tych warunków wynika, że funkcja osiągnie wartość zerową dla pewnego argumentu w tym przedziale. Właśnie dlatego mogliśmy użyć algorytmu wyszukiwania binarnego – w omawianym przypadku różnymi znakami są liczby parzyste i nieparzyste, zaś monotoniczność wynika z tego, że liczby są podzielone na parzyste i nieparzyste. Wiemy zatem, że „miejsce zerowe” (tutaj: pierwsza liczba parzysta) mogą zostać wyszukane za pomocą tego algorytmu.