Witam. Potrafię stworzyć algorytm wyszukujący największą liczbę w ciągu. Ale jak znaleźć drugą liczbę co do wielkości? Nie chcę gotowego rozwiązania, tylko proszę o podpowiedź.
Tak samo tylko zapisujesz jeszcze poprzednią największą wartość.
Ale jak zapisać tą poprzednią wartość?
Można też posortować ciąg w kolejności malejącej.
Ustaw pętlę na wyszukiwanie maksymalnej, przy czym tak jak wspomniał @winerfresh - zapisuj jeszcze jedną (taki mini stos);
Zadeklaruj dwie zmienne:
var
iFirst, iSecond: Word;
zainicjuj je:
iFirst := 0;
iSecond := 0;
i podczas wyszukiwania, w warunku sprawdzającym ustawiaj największą, a tą z największej przesuwaj do drugiej co do wielkości:
iSecond := iFirst;
iFirst := Ciag[I];
gdzie Ciag
to jakiś ciąg (w tym przypadku np. macierz, łańcuch tekstowy), a I
to licznik pętli;
Pamiętaj, że liczba niekoniecznie musi być większa od iFirst
i iSecond
; Sprawdzanie skonstruuj tak, by w przypadku, gdy wyraz ciągu jest większy od iSecond
, ale mniejszy od iFirst
, został wpakowany do iSecond
;
Zmieniłem identyfikatory zmiennych, bo mogą mieszać w głowie...
A mógłbyś mi napisać pętle sprawdzającą warunek? Myślę nad tym godzinę, ale jestem słaby w programowaniu i nic nie wymyśliłem...
Ylv napisał(a)
A mógłbyś mi napisać pętle sprawdzającą warunek?
Czyli mam Ci dać gotowca? Wiesz jaką zjebę dostałem za takie coś wczoraj? Nie dam więcej gotowca; Już dość Ci napisałem w tym temacie;
To co musisz zrobić jest poniżej (w pseudojęzyku):
1. Zainicjuj zmienne przechowujące dwie maksymalne liczby (iFirst, iSecond)
2. Ustaw im wartość, która na pewno będzie mniejsza od minimum w ciągu
3. Ustaw pętlę od I = 0 do ilość_elementów_ciągu - 1
3.1. Jeśli ciąg[I] jest większy od iSecond to
3.1.1. Jeśli ciąg[I] jest większy od iFirst to
3.1.1.1. Skopiuj wartość iFirst do iSecond
3.1.1.2. Skopiuj wartość ciąg[I] do iFirst
3.1.2. Jeśli nie
3.1.2.1. Skopiuj wartość ciąg[I] do iSecond
i to wszystko w tym temacie; Pewnie można go przyspieszyć, ale to zostawiam Tobie; Teraz wystarczy napisać to wykorzystując instrukcje języka Delphi
; To należy do Ciebie;
Fajne problemy macie :)
robisz to tak:
int maxmax = 0//ta wiekszza
int max = 0;
for(int i = 0; i < costam; i++){
if( costam[i] > maxmax){
max = maxmax;
maxmax = costam[i];
}
}
ZiomZiom napisał(a)
robisz to tak:
Tak się nie robi, bo ten algorytm jest błędny; Poza tym to nie ten język i formatowanie z d**y;
Jak już coś to tak:
int maxmax = 0
int max = 0;
for(int i = 0; i < LiczbaElementowCiagu - 1; i++)
{
if(Ciag[i] > maxmax)
{
max = maxmax;
maxmax = costam[i];
}
}
ale to i tak jest błedne, bo jeśli wartość ciągu jest większa od Max, ale mniejsza od MaxMax - nie zostanie wpisana do Max; Więc daruj sobie i najpierw naucz się interpretować zagadnienie, zanim wymażesz tutaj bzdurny kod;