Görev
N numara verilir. Bir dizideki en büyük ikinci öğeyi bulun.
Bu problem iki yoruma izin verir.
Örneğin, bize bir dizi sayı verilirse:
\(10\ 15\ 20\ 35\ 14\ 35\ 10\), o zaman cevap ne olmalıdır? ?
"İkinci en büyük öğe" altında veya basitçe "ikinci maksimum", şu şekilde anlaşılabilir:
1) tüm değerleri azalan olmayan bir düzende düzenlersek (sıralarsak) sondan bir önceki yerde olacak değer (bir sonraki her biri bir öncekinden büyük veya ona eşittir). Ardından, dikkate alınan sayı kümesi için cevap 35 değeri olacaktır;
2) sadece maksimumdan daha büyük olan elemanın değeri. O zaman cevap 20'dir.
Sayı kümesinde yalnızca bir maksimum öğe varsa (diğerleri daha azdır), o zaman her iki yorum da aynıdır ve cevap her iki durum için de aynı olacaktır, aksi halde cevap farklı olacaktır.
İlk durumu ele alalım (algoritmayı
sözde kod).
Cevabı bulmak için iki değişken kullanacağız:
1)
maksimum1
- maksimum değer (ilk maksimum);
2)
maksimum2
- ikinci maksimum (bizim cevabımız).
Değer aralığının değiştiği biliniyorsa, başlangıç değerleri olarak, aralığın alt sınırından açıkça daha az olan bir sayı alırız (örneğin,
-1000
aralığında)
ila
1000
- sayıyı al
-1001)
Değer aralığı bilinmiyorsa, ilk iki giriş sayısını max1
ve max2
değişkenlerinin başlangıç değerlerine yazabilir ve ardından bunları karşılaştırabilirsiniz. iki değişken.
giriş N //sayı sayısı
a, b girişi
maks1 = bir
maks2 = b
b > ise; bir, o zaman
maks1 = b
maks2 = bir
Sonra, diğer tüm unsurları göz önünde bulunduruyoruz (ilk 2 zaten görüntülendi, bu yüzden 3.'den başlayacağız)
3'ten n'ye i için nc
bir girin
eğer bir > maximum1 //max1'den büyük bir değer vardı
O
max2 = max1 //önceki ilk yüksek ikinci olur
max1 = a //yeni eleman ilk maksimum olacak
aksi takdirde
//sonraki eleman max1'den fazla değil
// maximum2 değeri ile karşılaştırılması gerekiyor
eğer bir > maksimum 2
O
max2 = a //yeni değer olarak al max2
// max1 bu durumda değişmez
Tüm
Tüm
kt
Bu algoritmayı kendiniz uygulamaya çalışın.