[C++] powtarzajace się elementy w tablicy

rosemary_oo
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 1 wrz 2012, o 20:33
Płeć: Kobieta
Lokalizacja: Warszawa

[C++] powtarzajace się elementy w tablicy

Post autor: rosemary_oo »

Mam problem z następującym zadaniem:
Do napisania jest funkcja, która zwraca drugi największy element w tablicy t o rozmiarze rozmiar. W przypadku, gdy są dwa równe największe elementy należy zwrócic jeden z nich. Można założyc, że rozmiar>1.

To co udało mi się napisać, działa ale pod warunkiem że wszystkie elementy tablicy są różne. Czy mógłby Ktoś poprawić ten kod tak żeby było spełnione dla każde przypadku ? (również wtedy gdy są dwa największe elementy).

Z góry dzięki za pomoc!

Moje próby rozwiazania:

Kod: Zaznacz cały

int drugi (int* t, int rozmiar) {
    
    int max=t[0];
    for(int i=1; i<rozmiar; i++) {
            if (t[i]>max)
            max=t[i];
            }
    int maxx;
    for(int i=1; i<rozmiar; i++) {
            if (t[i]>maxx && t[i]<max)
            maxx=t[i];
            }

     return maxx;
     }
int main() {
    int const n=100;
    int t[n];
    int s;
    cout<< "POdaj rozmiar";
    cin>>s;
    cout<<"Podaj elementy tablicy: ";
    for(int i =0; i<s; i++){
    cin>> t[i];
}
drugi(t,s);
cout<<drugi(t,s);
system("pause");
}
Ostatnio zmieniony 12 wrz 2012, o 17:37 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
royas
Użytkownik
Użytkownik
Posty: 363
Rejestracja: 24 sie 2012, o 09:27
Płeć: Mężczyzna
Lokalizacja: Cieszyn
Pomógł: 80 razy

[c++] powtarzajace się elementy w tablicy

Post autor: royas »

Nie testowałem, ale jakiś taki pomysł:
M[] przechowuje dwa ostatnie największe.
M[m] największy.

Kod: Zaznacz cały

int drugi(int* t, int r) {
   int M[2];
   int m;
   M[0]=t[0];
   M[1]=t[1];
   if (M[0]>M[1]) m=0 else m=1;
   for (int i=2;i<r;i++)
      if (t[i]>=M[m]) {
          m=(m+1)%2;
          M[m]=t[i];
     }
   return M[(m+1)%2];
}
ODPOWIEDZ