Mam problem z pewnym programem. Otóż mam do napisania:
funkcja dla danych liczbowych: n,a1,a2…an zwraca c takie, że w ciągu {a1…an} istnieją dokładnie 3 elementy większe od c.
wg. podpowiedzi kumpla zrobiłem to tak:
No i niby ok, mam program, wg. zasady działania powinno być ok, ale błędy w kodzie :<
#include
#include
#include
using namespace std;
int funkcja(int n, int *tablica){
int liczba, a;
for(int i=0; i
cin >> liczba;
tablica[i] = liczba;
}
std::sort(tablica,tablica+n);
int c = tablica[n-1];
for(int i=0; i
if (tablica[i] < c){
a=a++;
}
if (a = 3){
break;
}
}
return c;
}
int c = tablica[n-1];
for(int i=n-2; i<=0; i--)
{
if (tablica[i] < c) // jeśli jest taki sam to nic się nie zmienia
{
a=a++;
c = tablic[i];
}
if (a == 3){ //porówanie to dwa znaki '='
break;
}
}
też tak myślałem z pobraniem k-tego elementu od końca ale pytanie czy mają to być różne elementy (wszystkie) - wtedy musi być ta pętla czy tak jak zasugerowal @matzu trzy element nie konieczne różne, ale za to czy czwarty jest różny (czyli mniejszy), a jak nie to piąty… (znowu pętelka)
IMO nawet jeśli ten czwarty element nie będzie mniejszy od tego trzeciego, to nie trzeba sprawdzać tego piątego. Trzeba natomiast w takiej sytuacji wyrzucić wyjątek (coś w stylu ValueNotFoundException). Sądzę tak dlatego, że w treści zadania jest napisane “zwraca c takie, że w ciągu {a1…an} istnieją dokładnie 3 elementy większe od c” (tutaj zwracam uwagę na słowo dokładnie). Żeby jednak mieć pewność, czy nie trzeba sprawdzać tego piątego elementu, trzeba by spytać autora zadania.
Nigdy(!) nie próbuj odczytywać zawartości zmiennej lokalnej*, przed przypisaniem do niej danych. Oczekujesz zapewne zera, a tu niespodzianka - śmieci. To, że jakimś cudem, zadziała w jednym przypadku, to nie znaczy, że tak będzie zawsze. Przykład, z życia wzięty: parę dni temu napisał do mnie kolega, miał program, dwie zmienne lokalne w funkcji, i tak, jak Ty, od razu chciał je inkrementować:
* w przypadku zmiennych globalnych sytuacja ma się inaczej:
Jeżeli nie jest mniejszy to nie ma jak rozwiązać tego zadania, ponieważ nie podano co program ma zrobić w przypadku gdy rozwiązanie nie istnieje to niema co się wypierniczać z dodatkowymi zabezpieczeniami których nie wiadomo jak obsłużyć.