Najwieksze możliwe pole prostokąta

0

Próbowałem napisać ten program pare razy niestety bez skutecznie. Dlatego zwracam się z prośbą o pomoc tutaj. A mianowicie mam napisać algorytm
obliczający największe pole powierzchni prostokąta, które nie jest podzielne przez B, a długości
sąsiednich boków tego prostokąta należą do zbioru A i są różne.

Zbiór A zbiór B
7, 5, 11, 33 3
15, 12, 10, 6, 5, 1 5
6, 28, 7, 12, 10, 14, 5, 9, 4, 8, 18 7
4, 34, 16, 8, 6, 22, 14, 12, 2, 7 2
0

Pokaż co już masz.

0

W podanych przykładach liczby B są pierwsze. Przypadek, czy tak będzie zawsze? Dla liczb pierwszych zadanie jest prostsze.

1

To jest zadanie z tegorocznej matury z informatyki, tak na marginesie - wiem, bo pisałem ;-)

Rozwiązanie w czasie O(n) jest bajecznie proste - należy ze zbioru wejściowego wyrzucić wszystkie liczby podzielne przez te ze zbioru B (w zadaniu oryginalnie była jedna zmienna p, a nie cały zbiór) i następnie, jeśli zostały co najmniej dwie liczby, wziąć dwie największe jako boki prostokąta.

0

Ma być coś takiego ?

#include  <iostream>
using namespace std;
  
int main()
{
    int n;
    //liczba w zbiorze A
    cin>>n;
    int p;
    //liczba P
    cin>>p;
    int t[n];
    //zbiór liczb A
    for(int i=0; i<n; i++)
    {
        cin>>t[i];
    }
    sort(t, t+n);
    //sortowanie zbioru A
    bool z = true;
    for(int i=n-1; i>=1; i--)
    {
        if(z)
        {
        for(int j=n-1; j>=0; j--)
        {
            if(z)
            {
            if(i!=j)
            {
                if(t[i]!=t[j])
                {
                    if((t[i]*t[j])%p!=0)
                    {
                        cout<<t[i]*t[j];
                        z = false;
                    }
                }
            }
        }
        }
    }
    }
}
0

Hę, hę?
Twój algorytm pesymistycznie ma złożoność kwadratową, przeciętnie O(n log n) (std::sort).

Pomyśl - jak byś to zrobił na kartce, ręcznie, bez sprawdzania każdej możliwości?

1

wywalić wszystko co podzielne przez B, posortować wziąć dwie największe wartości, sprawdzić czy wynik dzieli się prze B, wyszukać kolejną największą parę itd.
Złośliwe dane wejściowe:

A: 42 30 60 66 78 28 27 
B:  12
0

Aby nie robić takiego zamętu w komentarzach: http://www.gloswielkopolski.pl/matura-2017/g/matura-2017-informatyka-odpowiedzi-cke-arkusz,12060822,23750512/

p (czyli liczba ze zbioru B) jest pierwsza, zatem moja odpowiedź jest najprostsza - @MarekR22 podał bardziej ogólne rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1