Darmowe konto pozwoli wrócić do niego później.
Polecenie
Zadanie 1. 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.
Zadanie 1.1.
Napisz algorytm (w postaci listy kroków, w pseudokodzie 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.
Darmowe konto pozwoli wrócić do niego później.
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:
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
Ocena według schematu punktowania CKE, zwykle w 15–30 s
Dowiedz się, ile punktów naprawdę zdobywasz. Zrób zdjęcie kartki albo wklej odpowiedź: Maturownik+ porówna ją ze schematem punktowania, policzy punkty i wytłumaczy, gdzie i dlaczego je tracisz.
Algorytm o złożoności logarytmicznej – wyszukiwanie binarne (w języku c++)
p ← 1
k ← n
dopóki p < k wykonuj
s ← (p + k) div 2
jeżeli (A[s] mod 2 = 1)
p ← s + 1
w przeciwnym przypadku
k ← s
w ← A[p]
Algorytm o złożoności logarytmicznej – wyszukiwanie binarne (w języku Python)
def szukaj_bin(A):
lewy, prawy = 1, n
while lewy < prawy:
środkowy = (lewy + prawy) // 2
if A[środkowy] % 2 != 0:
lewy = środkowy + 1
else:
prawy = środkowy
return prawy
Algorytm o złożoności liniowej – wyszukiwanie liniowe
p ← 1
dopóki A[p] mod 2 = 1 wykonuj
za poprawny algorytm o złożoności czasowej lepszej niż liniowa (warunek pętli, wyznaczenie podziału ciągu, wyznaczenie początku podciągu, wyznaczenie końca podciągu, wyznaczenie pierwszego elementu parzystego).
za poprawny algorytm o złożoności czasowej liniowej (prawidłowy przebieg pętli, sprawdzenie warunku parzystości, wyznaczenie pierwszego elementu parzystego).
za błędną odpowiedź albo brak odpowiedzi.
Za każde inne poprawne rozwiązanie o złożoności lepszej niż liniowa przyznajemy maksymalnie 5 punktów, a o złożoności liniowej – maksymalnie 3 punkty.
p ← p + 1
w ← A[p]
Algorytm o złożoności pierwiastkowej (przykład alternatywny).