Matura 2018 (maj). Zadanie 1. Analiza algorytmu
Rozważamy następujący algorytm:
Dane:
n – liczba całkowita dodatnia
Wynik:
p – liczba całkowita dodatnia
p ← 1 q ← n dopóki p < q wykonuj s ← (p+q) div 2 (*) jeżeli s*s*s < n wykonaj p ← s+1 w przeciwnym wypadku q ← s
Uwaga: zapis div oznacza dzielenie całkowite.
Zadanie 1.
Podaj wynik działania algorytmu dla wskazanych w tabeli wartości n.
n | p |
28 | 4 |
64 | 4 |
80 | 5 |
Miejsce na obliczenia.
Algorytm:
#include <iostream> using namespace std; int main() { cout << "Podaj n = "; int n, p=1; cin >> n; int q=n; int s; while (p<q) { s = (p+q)/2; if (s*s*s<n) p=s+1; else q=s; } cout << "p = " << p << endl; return 0; }
Zadanie 2.
Podaj najmniejszą oraz największą liczbę n, dla której wynikiem działania algorytmu będzie p = 10.
Miejsce na obliczenia.
Najmniejsza liczba n to 9*9*9+1=730, ponieważ musi być spełniony warunek s3<n. Największa liczba n to 10*10*10=1000, ponieważ musi być spełniony warunek s3<n.
Odpowiedź: Najmniejsza liczba to 730, największa liczba to 1000.
Zadanie 3.
Dokończ zdanie. Wybierz i zaznacz właściwą odpowiedź spośród podanych. Dla każdej liczby całkowitej n > 1 instrukcja oznaczona w algorytmie symbolem (*) wykona się
A. mniej niż 2*log2n razy.
B. więcej niż n/2, ale mniej niż n razy.
C. więcej niż n+1, ale mniej niż 2n razy.
D. więcej niż n2 razy.
Komentarz:
Odpowiedź A ponieważ, 2*log2n -> 2 * log264 = 2 * 6 = 12. Jest to mniej niż 12.
log264=x
2x = 64
26 = 64
kijank says:
Jak niby (5+1)div 2 to 2 a nie 3?
info says:
Dziękuje za znalezienie błędu, powinno być 3.