Matura 2017 (maj). Zadanie 1. Prostokąt
Dane są:
liczba całkowita n większa od 1
zbiór A zawierający n dodatnich, różnych liczb całkowitych
liczba pierwsza p
Zadanie 1.
Dla danych z każdego wiersza w tabeli oblicz największe pole powierzchni prostokąta, które nie jest podzielne przez p, a długości sąsiednich boków tego prostokąta są różne (nie może on być kwadratem) i należą do zbioru A. Zapisz pole tego prostokąta w kolumnie S. Jeżeli taki prostokąt nie istnieje, jako wynik podaj liczbę 0 (zero).
Zbiór A | p | S – pole szukanego prostokąta lub 0 (zero), jeśli nie można zbudować takiego prostokąta |
7, 5, 11, 33 | 3 | 77 |
15, 12, 10, 6, 5, 1 | 5 | 72 (6*12) |
6, 28, 7, 12, 10, 14, 5, 9, 4, 8, 18 | 7 | 216 (18*12) |
4, 34, 16, 8, 6, 22, 14, 12, 2, 7 | 2 | 0 |
Rozwiązanie:
Krok 1.
Szukając największe pole powierzchni prostokąta, które nie jest podzielne przez p rozpocząć należy od odrzucenia liczb podzielnych przez liczbę p.
15, 12, 10, 6, 5, 1
6, 28, 7, 12, 10, 14, 5, 9, 4, 8, 18
4, 34, 16, 8, 6, 22, 14, 12, 2, 7
Krok 2.
Wybieramy dwie największe liczby spośród pozostałych, wykonujemy iloczyn, wynik sprawdzamy czy nie est podzielny przez p.
12*6=72
18*12=216
7*—– brak drugiej liczby
Zadanie 2.
Zapisz (w postaci pseudokodu, listy kroków lub w wybranym języku programowania) algorytm obliczający największe pole powierzchni prostokąta, które nie jest podzielne przez p, a długości sąsiednich boków tego prostokąta należą do zbioru A i są różne.
Przy ocenie brana będzie pod uwagę złożoność obliczeniowa Twojego algorytmu.
Uwaga:
W zapisie algorytmu możesz wykorzystywać tylko następujące operacje arytmetyczne: dodawanie, odejmowanie, mnożenie, dzielenie całkowite i obliczanie reszty z dzielenia.
Specyfikacja:
Dane:
n – liczba całkowita większa od 1
A[1..n] – tablica zawierająca n różnych, dodatnich liczb całkowitych
p – liczba pierwsza
Wynik:
S – największe pole powierzchni prostokąta, które nie jest podzielne przez p,
a długości sąsiednich boków tego prostokąta są różne i zawarte w tablicy A;
jeśli nie można zbudować takiego prostokąta, wynikiem powinno być 0 (zero)
Rozwiązanie:
#include <iostream> #define N 11 #define P 7 using namespace std; int main() { int tab[N]={6, 28, 7, 12, 10, 14, 5, 9, 4, 8, 18}; int x=0,y=0; for (int i=0; i<N; i++) { if (tab[i]%P!=0) { if (tab[i] > x ) x = tab[i]; } } for (int i=0; i<N; i++) { if (tab[i]%P!=0) { if (tab[i] > y && tab[i] < x ) y = tab[i]; } } if (x*y>0) cout << "Pole prostokata = " << x << " * " << y << " = " << x*y << endl; else cout << "Wynik = 0 " << endl; return 0; }